缓存与 KV 存储Data Structures
Redis 数据结构 是什么?
String/Hash/List/Set/ZSet,选对结构比写对命令更重要
类比:工具箱,拧螺丝别用锤子
五种基础结构
先想清楚「我要回答什么问题」,再选结构。
- String:缓存对象、计数器(INCR)、分布式锁
- Hash:存对象的多个字段,可单独更新(购物车)
- List:消息队列、最新列表(LPUSH + LRANGE)
- Set:去重、共同好友(SINTER)、抽奖(SRANDMEMBER)
- ZSet:排行榜、延时队列(score 存时间戳)
进阶结构
Bitmap 做签到和布隆过滤器;HyperLogLog 做 UV 统计(误差 0.81%,12KB 顶千万级);GEO 做附近的人;Stream 做带消费组的消息队列。
大 key 与热 key
大 key(单个 value 几 MB、集合几十万元素)会让删除、迁移、持久化都变慢,甚至阻塞主线程;热 key(单个 key 每秒几十万请求)会打满单个分片。
- 大 key 拆分:Hash 按字段分片,List 按段拆多个 key
- 热 key:本地缓存 + 多副本 key 打散
- 用 redis-cli --bigkeys 定期体检