Redis 是一种高性能的键值存储系统,支持多种数据结构,每种数据结构都有特定的使用场景。以下是 Redis 的核心数据结构及其详细使用案例:
Redis 数据结构及使用案例
- 字符串(String)
存储文本、数字或二进制数据(最大 512MB)。
常用命令
SET key value [EX seconds] # 设置值(带过期时间)
GET key # 获取值
INCR key # 自增数字
DECR key # 自减数字
使用场景
缓存:存储用户信息、页面片段。
计数器:统计访问量、库存数量。
分布式锁:通过 `SET key value NX EX` 实现。
案例:用户访问量统计
SET user:1001:visits 0
INCR user:1001:visits # 访问量+1
GET user:1001:visits # 返回当前访问量
- 哈希(Hash)
键值对的集合,适合存储对象。
常用命令
HSET key field value # 设置字段值
HGET key field # 获取字段值
HGETALL key # 获取所有字段和值
HDEL key field # 删除字段
使用场景
存储对象:用户信息、商品属性。
部分更新:修改对象的部分字段。
案例:存储用户信息
HSET user:1001 name "Alice" age 30 email "alice@example.com"
HGET user:1001 name # 返回 "Alice"
HGETALL user:1001 # 返回所有字段和值
- 列表(List)
有序、可重复的字符串集合,支持双向操作。
常用命令
LPUSH key value1 value2 # 左侧插入元素
RPUSH key value1 value2 # 右侧插入元素
LPOP key # 左侧弹出元素
LRANGE key start end # 获取范围元素
使用场景
消息队列:实现生产者-消费者模型。
最新消息:存储用户最近浏览记录。
案例:消息队列
LPUSH tasks "task1" # 生产者发布任务
RPOP tasks key member1 member2 获取任务
- 集合(Set)
无序、唯一的字符串集合,支持集合运算。
常用命令
SADD key member1 member2 #添加
SMEMBERS key # 获取所有成员
SINTER key1 key2 # 求交集
SUNION key1 key2 # 求并集
使用场景
标签系统:存储用户标签。
共同好友:计算用户交集。
案例:用户标签管理
SADD user:1001:tags "tech" "redis" "database"
SADD user:1002:tags "tech" "python"
SINTER user:1001:tags user:1002:tags # 返回共同标签 ["tech"]
- 有序集合(Sorted Set/ZSet)
成员关联一个分数(score),按分数排序。
常用命令
SET key value [EX seconds] # 设置值(带过期时间)
GET key # 获取值
INCR key # 自增数字
DECR key # 自减数字ZADD key score1 member1 # 添加成员及分数
ZRANGE key start end # 按分数升序获取成员
ZREVRANGE key start end # 按分数降序获取成员
ZRANK key member # 获取成员排名
使用场景
排行榜:游戏积分排名、热搜榜单。
时间线:按时间排序的消息流。
案例:游戏排行榜
ZADD leaderboard 1000 "PlayerA" 2000 "PlayerB"
ZREVRANGE leaderboard 0 2 WITHSCORES # 返回前三名
- 其他高级数据结构
Bitmaps
位操作,适合统计用户在线状态。
SETBIT online:20231001 1001 1 # 用户1001在2023-10-01在线
BITCOUNT online:20231001 # 统计当天在线用户数
总结
- String :缓存、计数器
- Hash :对象存储
- List :队列、时间线 , 顺序操作
- Set :标签、去重 ,集合运算
- Sorted Set :排行榜、优先级队列 ,有序且唯一
- Bitmaps :布尔统计(如签到) ,极低内存消耗