Redis 之所以快,不只因为内存存储,还因为它提供了丰富的数据结构。日常开发中,掌握下面 5 种常用结构,基本就能覆盖大多数场景。
- String:最基础
String 是二进制安全的,可以存文本、数字、JSON、图片等。
常用命令:
SET key value GET key INCR key DECR key SETNX key value EXPIRE key60典型场景:
· 缓存对象
· 计数器,如文章阅读量
· 分布式锁
· 限流
- List:有序列表
List 底层是双向链表结构,支持从两端插入和弹出。
常用命令:
LPUSH list a RPUSH list b LPOP list RPOP list LRANGE list0-1典型场景:
· 简单消息队列
· 最新动态列表
· 时间线
注意:List 适合简单队列,复杂消息队列建议用 Stream。
- Hash:键值对集合
Hash 适合存储对象的多个字段。
常用命令:
HSET user name"Tom"HSET user age18HGET user name HGETALL user HDEL user age典型场景:
· 用户信息
· 商品属性
· 购物车
相比用多个 String 存对象字段,Hash 更省内存,也更方便管理。
- Set:无序唯一集合
Set 中的元素不重复,支持交集、并集、差集。
常用命令:
SADD tags redis SADD tags cache SMEMBERS tags SISMEMBER tags redis SINTER set1 set2 SUNION set1 set2典型场景:
· 标签系统
· 点赞去重
· 共同好友
· 抽奖
- ZSet:有序唯一集合
ZSet 每个元素都有一个 score,按 score 排序,元素唯一。
常用命令:
ZADD rank100tom ZADD rank90jerry ZRANGE rank0-1WITHSCORES ZREVRANGE rank0-1WITHSCORES ZINCRBY rank10tom典型场景:
· 排行榜
· 热度排序
· 延时队列
· 范围查询
其他常用结构
· Bitmap:位图,适合签到、活跃统计。
· HyperLogLog:基数统计,适合 UV 去重,内存占用极低。
· GEO:地理位置计算,附近的人、门店距离。
· Stream:专业消息队列,支持消费组。
底层小知识
Redis 会根据数据量自动选择底层编码:
· String:SDS
· List:quicklist
· Hash / Set:小数据用 listpack,大数据用 hashtable
· ZSet:小数据用 listpack,大数据用 skiplist + dict
这样设计的目标是:小对象省内存,大对象保证性能。
总结
日常使用优先掌握:
结构 一句话 典型场景
String 缓存和计数 缓存、锁、计数器
List 有序可重复 队列、时间线
Hash 对象字段 用户、商品、购物车
Set 无序不重复 标签、去重、交并集
ZSet 带分数排序 排行榜、延时队列
选对数据结构,往往比优化代码更有效。