Redis 五种基础数据结构与典型用途
Redis 五种基础数据结构与典型用途
Redis 是内存型键值数据库,读速可达十万级 QPS。它真正的威力在于 value 不只是字符串,有五种常用结构。
1. String 字符串
最基础,value 最大 512MB,还能当计数器:
SET user:1:name "Dong"
INCR post:1:views # 浏览量 +1,原子操作,不存在则从 0 开始
INCRBY score 10
SETNX lock 1 # 不存在才设置,可做简易分布式锁
适合:缓存对象 JSON、计数器、分布式锁、验证码(带过期时间)。
2. Hash 哈希
field-value 的映射,适合存对象,可单独改一个字段:
HSET user:1 name Dong age 26
HINCRBY user:1 age 1
HGET user:1 name
比整个对象 JSON 序列化后再改一个字段高效得多。
3. List 列表
双向链表,两头都能推/弹:
LPUSH timeline "post A" # 最新动态从头插入
LRANGE timeline 0 9 # 取前 10 条
BRPOP queue 0 # 阻塞式弹出,做简单消息队列
适合:最新列表、简易任务队列。
4. Set 集合
无序、自动去重,支持交并差集:
SADD post:1:tags js vue
SINTER user:1:likes user:2:likes # 共同点赞
SUNION ... # 并集
适合:标签、共同好友、抽奖去重、UV 统计。
5. ZSet 有序集合
每个元素带 score,按 score 排序且不重复:
ZADD rank 100 "Alice" 90 "Bob"
ZINCRBY rank 5 "Bob"
ZREVRANGE rank 0 2 WITHSCORES # 取前三名
适合:排行榜、延迟队列(score 存执行时间戳)、按权重排序的 feed 流。
选型小结
- 计数器/缓存 → String
- 对象、需单字段更新 → Hash
- 队列/时间线 → List
- 去重、集合运算 → Set
- 排序场景 → ZSet
所有结构都能配 EXPIRE 设 TTL。注意 Redis 是内存数据库,要规划好淘汰策略(maxmemory-policy)和持久化(RDB/AOF),否则重启丢数据。
看到这里了?如果这篇文章帮到过你
请我喝瓶可乐就好 🥤

评论0 条
还没有评论,来抢沙发~