Redis常见数据结构

Redis常见的数据结构:String,List,Set,Zset,Hash
在这里插入图片描述

1.String

  • 描述:一个key对应一个value。value可以是:
    • 文本字符串(最大512MB)
    • 二进制安全的字节序列
    • 整数或浮点数
  • 核心命令:
    • SET key value [EX seconds|PX milliseconds] [NX|XX]: 设置值 (可设置过期、NX-键不存在才设置、XX-键存在才设置)。
    • GET key: 获取值。
    • INCR key / DECR key: 将存储的整数值增一/减一。
    • INCRBY key increment / DECRBY key decrement: 按指定步长增减整数值。
    • INCRBYFLOAT key increment: 增加浮点数值。
    • APPEND key value: 追加字符串。
    • GETRANGE key start end: 获取子字符串。
    • SETRANGE key offset value: 覆盖部分字符串。
    • STRLEN key: 获取字符串长度。
    • MSET key1 value1 [key2 value2 …] / MGET key1 [key2 …]: 批量设置/获取多个键值。
  • 用法
    • 缓存HTML片段、API相应,数据库查询结果
    • 计算器(页面访问量,点赞数,库存扣减)
    • 分布式锁
    • 对象(需要序列化/反序列化)

2.Hash

  • 描述:一个key对应一个 __字段-值集合(field-value)__对的集合。适合存对象。
  • 核心命令:
    • HSET key field value [field value …]: 设置一个或多个字段的值。
    • HGET key field: 获取指定字段的值。
    • HMSET key field value [field value …]: 批量设置多个字段 (已弃用,用 HSET 替代)。
    • HMGET key field1 [field2 …]: 批量获取多个字段的值。
    • HGETALL key: 获取哈希中 所有 字段和值。
    • HDEL key field1 [field2 …]: 删除一个或多个字段。
    • HEXISTS key field: 检查字段是否存在。
    • HKEYS key: 获取哈希中所有字段名。
    • HVALS key: 获取哈希中所有字段值。
    • HLEN key: 获取哈希中字段的数量。
    • HINCRBY key field increment: 将哈希中指定字段的整数值增加指定步长。
    • HINCRBYFLOAT key field increment: 将哈希中指定字段的浮点数值增加指定步长。
    • HSCAN key cursor [MATCH pattern] [COUNT count]: 增量迭代哈希中的字段 (用于大型哈希)。

3.List

  • 描述: 一个键 (key) 对应一个有序的字符串元素序列。元素按插入顺序排序。可以在列表的头部 (Left) 或 尾部 (Right) 高效地添加/删除元素。支持基于下标的访问。
  • 核心命令:
    • LPUSH key element [element …]: 将一个或多个元素插入列表头部。
    • RPUSH key element [element …]: 将一个或多个元素插入列表尾部。
    • LPOP key [count]: 移除并返回列表头部的一个或多个元素。
    • RPOP key [count]: 移除并返回列表尾部的一个或多个元素。
    • LLEN key: 获取列表长度。
    • LRANGE key start stop: 获取列表中指定下标范围 (闭区间) 的元素。
    • LINDEX key index: 获取列表中指定下标的元素。
    • LSET key index element: 设置列表中指定下标的元素值。
    • LINSERT key BEFORE|AFTER pivot element: 在列表中指定元素 (pivot) 的前面或后面插入新元素。
    • LREM key count element: 移除列表中指定数量的匹配元素 (count>0 从头找;count<0 从尾找;count=0 移除所有)。
    • LTRIM key start stop: 修剪列表,只保留指定下标范围内的元素。
    • BLPOP key1 [key2 …] timeout / BRPOP key1 [key2 …] timeout: 阻塞版本的 LPOP/RPOP,在列表为空时阻塞客户端直到超时或有元素可弹出。
    • RPOPLPUSH source destination / BRPOPLPUSH source destination timeout: 原子地从 source 列表尾部弹出元素并插入到 destination 列表头部 (阻塞版本 BRPOPLPUSH 可用)。
  • 用法
    • 消息队列: LPUSH (生产者) + BRPOP (消费者) 实现简单的 FIFO 队列。RPOPLPUSH 可用于实现安全队列 (处理失败后元素还在备份列表)。
    • 时间线/最新列表: LPUSH 添加新项目,LTRIM 保持列表长度 (如最新 100 条微博)。
    • 生产者-消费者模型: 多个生产者 LPUSH,多个消费者 BRPOP 并行工作。
    • 记录操作日志: 按顺序记录用户操作或系统事件。
    • 分页: 使用 LRANGE 获取特定页面的数据。

4.Set

  • 描述:一个键 (key) 对应一个无序的、唯一的字符串元素集合。不允许重复元素。提供高效的集合运算 (交集、并集、差集)。
  • 核心命令
    • SADD key member [member …]: 向集合添加一个或多个成员。
    • SREM key member [member …]: 从集合移除一个或多个成员。
    • SMEMBERS key: 返回集合中的所有成员 (注意:对于大集合慎用,会阻塞服务端)。
    • SISMEMBER key member: 检查成员是否在集合中。
    • SCARD key: 获取集合成员数量。
    • SPOP key [count]: 随机移除并返回集合中的一个或多个成员。
    • SRANDMEMBER key [count]: 随机返回集合中的一个或多个成员 (不移除)。
    • SINTER key [key …]: 计算多个集合的交集。
    • SUNION key [key …]: 计算多个集合的并集。
    • SDIFF key [key …]: 计算第一个集合与其他集合的差集 (在第一个集合中但不在其他集合中的元素)。
    • SINTERSTORE destination key [key …] / SUNIONSTORE destination key [key …] / SDIFFSTORE destination key [key …]: 将交集/并集/差集的结果存储到一个新的 destination 集合中。
    • SSCAN key cursor [MATCH pattern] [COUNT count]: 增量迭代集合中的成员。
    • SMOVE source destination member: 将成员从 source 集合移动到 destination 集合。
  • 用法
    • 唯一性保证: 存储用户 ID、标签 (Tag)、IP 地址等需要去重的数据。
    • 标签系统: 给文章/商品打标签 (SADD article:1000:tags redis database),查找具有特定标签的所有文章 (SINTER tag:redis:articles tag:database:articles)。
    • 社交关系: 存储用户的关注列表 (SADD user:1000:followers 2000)、粉丝列表 (SADD user:2000:following 1000),判断是否关注 (SISMEMBER),计算共同关注 (SINTER user:1000:followers user:2000:followers)。
    • 抽奖/随机推荐: SPOP 或 SRANDMEMBER 实现随机选取。

5.ZSet

  • 描述:一个键 (key) 对应一个有序的、唯一的字符串元素集合。每个元素都关联一个分数 (Score), 类型为双精度浮点数。元素根据分数从小到大排序。分数可以相同,如果分数相同,则按成员的字典序排序。集合成员唯一,但分数可以更新。
  • 核心命令
    • ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member …]: 添加或更新成员及其分数。选项丰富 (NX-仅添加新成员,XX-仅更新现有成员,GT-新分数大于当前分数才更新,LT-新分数小于当前分数才更新,CH-返回被修改成员的数量,INCR-分数增加)。
    • ZREM key member [member …]: 移除一个或多个成员。
    • ZSCORE key member: 获取成员的分数。
    • ZRANK key member / ZREVRANK key member: 获取成员在排序中的正序排名 (从0开始) / 逆序排名 (从0开始)。
    • ZRANGE key start stop [WITHSCORES]: 按分数升序返回指定排名范围的成员 (带 WITHSCORES 返回分数)。
    • ZREVRANGE key start stop [WITHSCORES]: 按分数降序返回指定排名范围的成员。
    • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]: 返回分数在 min 和 max 之间的成员 (升序)。
    • ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]: 返回分数在 max 和 min 之间的成员 (降序)。
    • ZCARD key: 获取成员数量。
    • ZCOUNT key min max: 计算分数在 min 和 max 之间的成员数量。
    • ZINCRBY key increment member: 将成员的分数增加指定步长。
    • ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]: 计算多个有序集合的交集并存储到 destination (可加权,可指定聚合方式:SUM-分数相加, MIN-取最小分数, MAX-取最大分数)。
    • ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]: 计算多个有序集合的并集并存储到 destination。
    • ZSCAN key cursor [MATCH pattern] [COUNT count]: 增量迭代有序集合中的成员。
    • ZRANGEBYLEX key min max [LIMIT offset count] / ZREVRANGEBYLEX key max min [LIMIT offset count]: 按字典序范围查询成员 (要求所有成员分数相同!)。
    • ZLEXCOUNT key min max: 计算字典序在 min 和 max 之间的成员数量 (要求所有成员分数相同!)。
  • 用法
    • 排行榜: 最经典场景 (ZADD leaderboard 1000 “PlayerA”, ZREVRANGE leaderboard 0 9 WITHSCORES 获取 Top10)。
    • 带权重的队列/优先级队列: 分数代表优先级,ZRANGEBYSCORE … LIMIT 0 1 获取最高优先级的任务。
    • 范围查询: 按时间戳排序的事件 (ZADD events 1645584000 “event1”),查找特定时间范围内的事件 (ZRANGEBYSCORE events start_timestamp end_timestamp)。
    • 延迟队列: 任务执行时间戳作为分数,定时任务轮询 ZRANGEBYSCORE … WITHSCORES 获取到期任务。
    • 带分数的去重集合: 需要同时满足唯一性和按某种权重排序的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值