Redis 集合、有序集合与通用命令详解

发布于:2025-05-28 ⋅ 阅读:(20) ⋅ 点赞:(0)

注:本篇为苍穹外卖学习笔记

Redis 集合、有序集合与通用命令详解

本文将深入讲解 Redis 中 集合(Set)有序集合(Sorted Set) 以及 通用操作命令,通过实际案例演示它们的核心用法。

一、集合(Set)操作命令

集合存储唯一、无序的元素,支持高效的集合运算(交集、并集等)。

核心命令与示例


# 添加/删除元素
sadd tags "python" "java"       # 添加元素,返回成功插入数量(如 2)
srem tags "java"                # 删除元素,返回删除数量(如 1)

# 查询操作
smembers tags                   # 返回所有元素(如 ["python"])
sismember tags "python"         # 检查元素是否存在,返回 1(存在)或 0

# 集合运算
sadd group1 "a" "b" "c"  
sadd group2 "b" "c" "d"  
sinter group1 group2            # 交集,返回 ["b", "c"]  
sunion group1 group2            # 并集,返回 ["a","b","c","d"]
sdiff group1 group2             # 差集(group1有而group2无),返回 ["a"]

# 随机操作
spop tags                       # 随机移除并返回一个元素(如 "python")
scard tags                      # 返回集合元素总数

应用场景

  • 标签系统(文章标签、商品分类)
  • 好友关系(共同关注、可能认识的人)
  • 唯一数据去重(抽奖用户ID存储)

二、有序集合(Sorted Set)操作命令

有序集合存储唯一元素,每个元素关联一个 score(分数),按分数排序。

核心命令与示例


# 添加元素(格式:zadd 键 score1 成员1 score2 成员2)
zadd leaderboard 95 "userA" 80 "userB"  
zadd leaderboard 90 "userC"      # 更新userC分数(若存在则覆盖)

# 范围查询
zrange leaderboard 0 -1          # 按分数升序返回所有成员 ["userB", "userC", "userA"]  
zrevrange leaderboard 0 -1       # 降序返回 ["userA", "userC", "userB"]  
zrangebyscore leaderboard 85 100 # 返回分数在 [85,100] 的成员 ["userC", "userA"]

# 排名与分数操作
zrank leaderboard "userA"        # 返回升序排名(从0开始),此处返回 2  
zrevrank leaderboard "userA"     # 降序排名,返回 0(第一名)  
zscore leaderboard "userB"       # 返回分数 80

# 删除操作
zrem leaderboard "userB"         # 移除指定成员  
zremrangebyrank leaderboard 0 0  # 删除升序排名第0的元素(最低分)

应用场景

  • 实时排行榜(游戏积分、热搜榜单)
  • 延时队列(用分数存执行时间戳)
  • 优先级任务调度(按权重调度任务)

三、通用操作命令

适用于所有 Redis 数据类型的常用命令。

核心命令与示例


# 键管理
keys user:*                     # 匹配所有以 user: 开头的键(生产环境慎用)  
del user:1001                   # 删除键,返回删除数量(如 1)  
exists user:1001                # 判断键是否存在,返回 0 或 1  
expire cache:data 3600          # 设置3600秒后过期  
ttl cache:data                  # 查看剩余生存时间(秒),-1为永久,-2为已过期  

# 数据类型查询
type user:1001                  # 返回键的类型(如 hash/set/zset 等)  

# 批量操作
scan 0 match user:* count 10    # 分页迭代查询键(安全替代 keys 命令)  

# 数据库操作
select 1                        # 切换到1号数据库(默认0-15)  
flushdb                         # 清空当前数据库  
flushall                        # 清空所有数据库(高危操作!)

注意事项

  • KEYS 可能阻塞服务,生产环境推荐使用 SCAN
  • FLUSHALL 会删除所有数据,需谨慎使用

四、数据结构对比速查

结构类型 核心特性 典型场景
Set 唯一元素、集合运算 标签系统、共同好友
Sorted Set 有序元素、分数排序 排行榜、优先级任务
通用命令 跨类型操作 键管理、数据清理

通过合理运用这些命令,可以高效解决去重、排序、系统管理等常见需求。建议通过 Redis 官方提供的 redis-cli 工具进行实践练习。


网站公告

今日签到

点亮在社区的每一天
去签到