Redis List/Set/ZSet 命令
Redis List/Set/ZSet 命令 的完整教学讲解。
List 列表
基本写法:LPUSH 左侧插入
LPUSH <key> <value1> [value2 ...]
# 在列表头部插入元素
LPUSH messages "hello" "world"
基本写法:RPUSH 右侧插入
RPUSH <key> <value1> [value2 ...]
# 在列表尾部插入元素
RPUSH queue:tasks task1 task2
基本写法:LPOP 左侧弹出
LPOP <key> [count]
# 从列表头部弹出元素
LPOP queue:tasks
基本写法:RPOP 右侧弹出
RPOP <key> [count]
# 从列表尾部弹出元素
RPOP queue:tasks
基本写法:LRANGE 获取范围
LRANGE <key> <start> <stop>
# 获取列表指定范围元素(0 到 -1 为全部)
LRANGE messages 0 -1
基本写法:LINDEX 按索引获取
LINDEX <key> <索引>
# 获取指定索引位置的元素
LINDEX messages 0
基本写法:LLEN 获取长度
LLEN <key>
# 获取列表长度
LLEN messages
基本写法:LINSERT 插入元素
LINSERT <key> BEFORE|AFTER <pivot> <value>
# 在指定元素前或后插入
LINSERT messages BEFORE "world" "new"
基本写法:LREM 删除指定元素
LREM <key> <count> <value>
# 删除指定数量的匹配元素
LREM messages 2 "hello"
基本写法:LTRIM 修剪列表
LTRIM <key> <start> <stop>
# 仅保留指定范围元素
LTRIM messages 0 99
基本写法:LSET 修改元素
LSET <key> <索引> <value>
# 修改指定索引位置的元素
LSET messages 0 "updated"
基本写法:RPOPLPUSH 转移元素
RPOPLPUSH <源> <目标>
# 从源列表尾部弹出并插入目标列表头部
RPOPLPUSH queue:pending queue:processing
基本写法:LMOVE 转移元素(替代 RPOPLPUSH)
LMOVE <源> <目标> <LEFT|RIGHT> <LEFT|RIGHT>
# 灵活指定源和目标的弹出插入方向
LMOVE queue:pending queue:processing LEFT RIGHT
基本写法:BLPOP 阻塞弹出
BLPOP <key> [key ...] <超时>
# 阻塞式左侧弹出(0 表示永久阻塞)
BLPOP queue:tasks 30
基本写法:BRPOP 阻塞弹出
BRPOP <key> [key ...] <超时>
# 阻塞式右侧弹出
BRPOP queue:tasks 30
Set 集合
基本写法:SADD 添加元素
SADD <key> <member1> [member2 ...]
# 向集合添加元素
SADD tags:article:1 redis mysql postgresql
基本写法:SREM 删除元素
SREM <key> <member1> [member2 ...]
# 从集合删除元素
SREM tags:article:1 mysql
基本写法:SMEMBERS 获取所有元素
SMEMBERS <key>
# 获取集合所有元素
SMEMBERS tags:article:1
基本写法:SISMEMBER 判断成员存在
SISMEMBER <key> <member>
# 判断元素是否在集合中
SISMEMBER tags:article:1 redis
基本写法:SMISMEMBER 批量判断
SMISMEMBER <key> <member1> [member2 ...]
# 批量判断多个元素是否存在
SMISMEMBER tags:article:1 redis mysql mongodb
基本写法:SCARD 获取集合大小
SCARD <key>
# 获取集合元素数量
SCARD tags:article:1
基本写法:SRANDMEMBER 随机获取
SRANDMEMBER <key> [count]
# 随机获取元素不删除
SRANDMEMBER tags:article:1 2
基本写法:SPOP 随机弹出
SPOP <key> [count]
# 随机弹出元素并删除
SPOP lucky:draw 1
基本写法:SMOVE 转移元素
SMOVE <源> <目标> <member>
# 将元素从一个集合转移到另一个
SMOVE set:old set:new member1
Set 集合运算
基本写法:SINTER 交集
SINTER <key1> [key2 ...]
# 获取多个集合的交集
SINTER tags:article:1 tags:article:2
基本写法:SUNION 并集
SUNION <key1> [key2 ...]
# 获取多个集合的并集
SUNION tags:article:1 tags:article:2
基本写法:SDIFF 差集
SDIFF <key1> [key2 ...]
# 获取第一个集合与其他集合的差集
SDIFF tags:article:1 tags:article:2
基本写法:SINTERSTORE 交集存储
SINTERSTORE <目标> <key1> [key2 ...]
# 将交集结果存储到新集合
SINTERSTORE common:tags tags:article:1 tags:article:2
基本写法:SUNIONSTORE 并集存储
SUNIONSTORE <目标> <key1> [key2 ...]
# 将并集结果存储到新集合
SUNIONSTORE all:tags tags:article:1 tags:article:2
基本写法:SDIFFSTORE 差集存储
SDIFFSTORE <目标> <key1> [key2 ...]
# 将差集结果存储到新集合
SDIFFSTORE diff:tags tags:article:1 tags:article:2
基本写法:SINTERCARD 交集数量(7.0+)
SINTERCARD <numkeys> <key1> [key2 ...] [LIMIT <数量>]
# 仅返回交集元素数量不返回具体元素
SINTERCARD 2 tags:article:1 tags:article:2
Sorted Set 有序集合
基本写法:ZADD 添加元素
ZADD <key> [NX|XX] [GT|LT] [CH] [INCR] <score1> <member1> [score2 member2 ...]
# 添加带分数的元素
ZADD leaderboard 100 user:1 90 user:2 80 user:3
基本写法:ZADD 仅更新已存在元素
ZADD <key> XX <score> <member>
# 仅更新已存在成员的分数
ZADD leaderboard XX 95 user:2
基本写法:ZADD 仅新增不更新
ZADD <key> NX <score> <member>
# 仅添加新成员不更新已有成员
ZADD leaderboard NX 85 user:4
基本写法:ZSCORE 获取分数
ZSCORE <key> <member>
# 获取成员的分数
ZSCORE leaderboard user:1
基本写法:ZMSCORE 批量获取分数
ZMSCORE <key> <member1> [member2 ...]
# 批量获取多个成员分数
ZMSCORE leaderboard user:1 user:2 user:3
基本写法:ZRANK 升序排名
ZRANK <key> <member>
# 获取成员升序排名(0 为最小)
ZRANK leaderboard user:1
基本写法:ZREVRANK 降序排名
ZREVRANK <key> <member>
# 获取成员降序排名(0 为最大)
ZREVRANK leaderboard user:1
基本写法:ZRANGE 按索引范围获取
ZRANGE <key> <start> <stop> [WITHSCORES]
# 按升序获取索引范围元素
ZRANGE leaderboard 0 9 WITHSCORES
基本写法:ZREVRANGE 降序范围获取
ZREVRANGE <key> <start> <stop> [WITHSCORES]
# 按降序获取索引范围元素
ZREVRANGE leaderboard 0 9 WITHSCORES
基本写法:ZRANGEBYSCORE 按分数范围获取
ZRANGEBYSCORE <key> <min> <max> [WITHSCORES] [LIMIT offset count]
# 获取分数范围内的元素
ZRANGEBYSCORE leaderboard 80 100 WITHSCORES LIMIT 0 10
基本写法:ZREVRANGEBYSCORE 降序按分数获取
ZREVRANGEBYSCORE <key> <max> <min> [WITHSCORES] [LIMIT offset count]
# 降序获取分数范围内的元素
ZREVRANGEBYSCORE leaderboard 100 80 WITHSCORES LIMIT 0 10
基本写法:ZRANGEBYSCORE 使用无穷大
ZRANGEBYSCORE <key> -inf +inf [WITHSCORES]
# 获取全部元素
ZRANGEBYSCORE leaderboard -inf +inf WITHSCORES
基本写法:ZINCRBY 增加分数
ZINCRBY <key> <增量> <member>
# 增加成员分数
ZINCRBY leaderboard 5 user:1
基本写法:ZREM 删除元素
ZREM <key> <member1> [member2 ...]
# 删除有序集合元素
ZREM leaderboard user:3
基本写法:ZREMRANGEBYRANK 按排名删除
ZREMRANGEBYRANK <key> <start> <stop>
# 按排名范围删除元素
ZREMRANGEBYRANK leaderboard 0 9
基本写法:ZREMRANGEBYSCORE 按分数删除
ZREMRANGEBYSCORE <key> <min> <max>
# 按分数范围删除元素
ZREMRANGEBYSCORE leaderboard 0 60
基本写法:ZCARD 获取元素数量
ZCARD <key>
# 获取有序集合元素总数
ZCARD leaderboard
基本写法:ZCOUNT 按分数统计数量
ZCOUNT <key> <min> <max>
# 统计指定分数范围内的元素数量
ZCOUNT leaderboard 80 100
ZSet 集合运算
基本写法:ZUNIONSTORE 并集存储
ZUNIONSTORE <目标> <numkeys> <key> [key ...] [WEIGHTS <权重>...] [AGGREGATE SUM|MIN|MAX]
# 多个有序集合并集并按 SUM 聚合分数
ZUNIONSTORE total:score 2 score:week1 score:week2 AGGREGATE SUM
基本写法:ZINTERSTORE 交集存储
ZINTERSTORE <目标> <numkeys> <key> [key ...] [WEIGHTS <权重>...] [AGGREGATE SUM|MIN|MAX]
# 多个有序集合交集并按 MAX 聚合分数
ZINTERSTORE common:high 2 set1 set2 AGGREGATE MAX
基本写法:ZDIFFSTORE 差集存储
ZDIFFSTORE <目标> <numkeys> <key> [key ...]
# 多个有序集合差集存储
ZDIFFSTORE diff:set 2 set1 set2
基本写法:ZUNION 并集返回(7.0+)
ZUNION <numkeys> <key> [key ...] [WITHSCORES]
# 直接返回并集结果不存储
ZUNION 2 set1 set2 WITHSCORES
基本写法:ZINTER 交集返回(7.0+)
ZINTER <numkeys> <key> [key ...] [WITHSCORES]
# 直接返回交集结果不存储
ZINTER 2 set1 set2 WITHSCORES
实用模式
基本写法:消息队列(List)
LPUSH <queue> <message> 配合 BRPOP
# 生产者推送消息
LPUSH queue:email "send to user1"
# 消费者阻塞获取消息
BRPOP queue:email 30
基本写法:排行榜(ZSet)
ZADD <rank> <score> <member> 配合 ZREVRANGE
# 更新用户积分
ZADD rank:game 1500 user:1
# 获取前 10 名
ZREVRANGE rank:game 0 9 WITHSCORES
基本写法:共同关注(Set)
SINTER <user1:follow> <user2:follow>
# 获取两个用户的共同关注
SINTER user:1:follow user:2:follow
基本写法:延迟队列(ZSet)
ZADD <delay:queue> <执行时间戳> <任务>
# 添加延迟任务到队列
ZADD delay:queue 1718334600000 task:1001
# 扫描到期任务
ZRANGEBYSCORE delay:queue 0 1718334600000 LIMIT 0 100
基本写法:滑动窗口限流(ZSet)
ZADD <rate:key> <时间戳> <唯一标识> 配合 ZREMRANGEBYSCORE
# 滑动窗口限流记录请求
ZADD rate:user1 1718334600000 req-1
# 清理窗口外的记录
ZREMRANGEBYSCORE rate:user1 0 1718334540000
# 获取窗口内请求数
ZCARD rate:user1