Redis五种数据结构及真实应用场景
Redis 五种基本数据结构:String、Hash、List、Set、ZSet,以及真实应用场景解析。
String(字符串)
简介
Redis 中最基本、最常用的数据类型。二进制安全,可以存储 JSON、JPEG 等任意格式。
内部编码
- 整型数字 →
int - ≤39字节字符串 →
embstr - >39字节 →
raw
真实场景
1. 缓存配置数据
1 | # 地区表等少改数据,JSON存入String |
2. 缓存对象
1 | r.set('user:1001', json.dumps(user_obj)) |
3. 数据统计(自增自减)
1 | incr page_view:url_id # 访问量计数 |
4. 时间内限制请求(验证码5分钟有效)
1 | key = f"sms:sent:{user_id}" |
5. 订单号全局唯一
1 | SET order_no 2001 |
6. 分布式 Session
1 | r.setex(f"session:{token}", 1800, json.dumps(user_data)) |
常用命令
1 | set mykey "test" # 设置值 |
Hash(哈希)
简介
类似 Map<String, Map<String, String>>,适合存储对象。可单独修改对象的某个字段,比 String 整体 JSON 更灵活。
内部编码
- 元素个数 <512,所有值 <64字节 →
ziplist - 否则 →
hashtable
真实场景
1. Redisson 分布式锁(可重入)
锁内部用 Hash 存线程ID实现可重入。
2. 购物车
1 | key = cart:{用户id} |
1 | hset cart:1001 2001 1 # 添加商品 |
3. 缓存对象
1 | hset user:1001 name "张三" age "25" |
List(列表)
简介
链表,按插入顺序存储,可做栈/队列。元素可重复。
场景
1. 最新消息/动态列表
1 | lpush user:1001:timeline "动态内容" |
2. 分页列表
1 | # 先 lpush,后用 lrange 分页 |
Set(集合)
简介
无序不重复集合,支持交集/并集/差集。
场景
1. 标签(用户标签、文章标签)
1 | sadd article:1001:tags python redis mysql |
2. 抽奖(不重复)
1 | sadd lottery:20240101 user1 user2 user3 user4 |
3. 关注/粉丝
1 | sinter user:1001:follow user:1002:follow # 共同关注 |
ZSet(有序集合)
简介
每个元素带分值,按分值排序。不可重复。
场景
1. 排行榜
1 | zadd leaderboard 100 "用户A" |
2. 延时队列
1 | # score 存时间戳 |
3. 热搜榜单
1 | zincrby hot:search 1 "端午节" |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 符十三郎!

