数据结构与常用命令
String:万能基础
最常用的结构,可存文本、数字、二进制(序列化对象图片等)。
Tip
SET key value EX seconds NX 是原子的「设置并加过期」,等价于分布式锁的加锁原语;SETNX + EXPIRE 两步在崩溃时可能留下永不过期的锁。
Hash:对象存储
适合存储对象的多个字段,可单独读写字段,省内存。
List:列表 / 队列
双向链表,适合消息队列、最新列表、栈。
Set:无序集合
去重与集合运算,适合标签、共同好友、抽奖。
ZSet:有序集合
带分数的集合,适合排行榜、延时队列、范围查询。
Tip
排行榜用 ZINCRBY + ZREVRANGE,分页与实时排名都能优雅解决。延时队列可用 ZSet:score 存「执行时间戳」,消费者用 ZRANGEBYSCORE key 0 now LIMIT 0 10 拉取到期任务,配合 Lua 保证原子弹出。
高级结构
Warning
HyperLogLog 不精确(标准误差 0.81%)且无法枚举元素,只适合基数估算(如 UV)。需要精确去重时必须用 Set。Bitmap 只适合「离散 ID 不大、可映射为位偏移」的场景。
键管理与过期
小结
- String 万能、Hash 存对象、List 做队列、Set 去重集合运算、ZSet 做排行榜。
- Bitmap、HyperLogLog、GEO、Stream 覆盖位统计、基数估算、地理位置与消息流。
- 加锁用
SET NX EX保证原子;遍历用SCAN而非KEYS。 - 一切键都应设置合理过期,避免内存无限增长。