D
AI
学习工作台
8 周后端冲刺2026-05-222 分钟阅读

Redis 数据结构

String/Hash/List/Set/ZSet 与底层实现

8周冲刺week6Redis数据结构记笔记标记疑惑

Redis 定位

内存 KV 存储,单线程命令执行(6.0+ 多 IO 线程读网络)。用作缓存、计数、分布式锁、排行榜、会话。Week 6 衔接 week06-cache-patterns 与持久化集群。

五类基础结构

String

SET/GET/INCR/DECR、SETNX 分布式锁雏形、Bitmap、HyperLogLog 基数统计。

SET user:1:name "alice" EX 3600
INCR page:views

Hash

字段 map,适合对象:HSET user:1 name alice age 30

List

LPUSH/RPOP 队列;LRANGE 分页;注意大数据量内存。

Set

SADD/SMEMBERS 去重;SINTER 共同关注。

ZSet

ZADD score member;ZRANGE 排行榜;ZRANK 名次。

底层编码(面试)

  • int:整数字符串。
  • embstr:短字符串嵌入。
  • hashtable / skiplist:大 ZSet。
  • listpack:紧凑列表替代 ziplist(新版本)。
理解 编码转换阈值 即可,不必背每个 config。

单线程为何快

纯内存、IO 多路复用、高效数据结构、避免锁竞争。避免 大 key、热 key、O(N) 命令 阻塞全局。

与 MySQL 分工

Cache aside:读 Redis miss 读 DB 回填。Week 5 索引优化减轻 DB 压力。

命令复杂度

  • HGET O(1)
  • LRANGE O(N)
  • KEYS * 生产禁用,用 SCAN

高级结构与使用边界

HyperLogLog 估算 UV,误差约 0.81%,极省内存。Bitmap 做签到、布隆过滤器可放客户端或 Redis Module。Stream 提供 consumer group,轻量消息场景可用,但大规模仍推荐 Kafka。Geo 基于 ZSet 实现附近的人,理解 geohash 精度即可。

大 Key 与热 Key 治理

单 key 过大导致阻塞与迁移困难:Hash 拆 field 到多 key、List 分页。热 key 本地缓存 + 随机过期 jitter,或 read replica 分担。Pipeline 批量降低 RTT,但非事务;需要原子时用 Lua 脚本或 MULTI/EXEC。

面试综合

「Redis 为什么快?」→ 内存、单线程无锁命令、IO 多路复用、高效编码。「String 还是 Hash 存对象?」→ 字段少且整对象读写 Hash;仅整取整存 String JSON。衔接 week06-cache-patterns 谈一致性。

补充要点

Lua 脚本保证原子;事务 MULTI 非关系数据库 ACID。内存淘汰策略 allkeys-lru 与 volatile-lru 区别。主从 read scaling 注意延迟。

命令选型与性能

计数器用 INCR 原子;分布式锁用 SET key NX EX ttl,解锁用 Lua 比对 value 防误删。排行榜 ZADD + ZREVRANGE;延时队列 ZSet score 为执行时间。避免 KEYS,生产用 SCAN。大 List 拆分或改用 Stream。理解单线程下慢命令对全局延迟影响,设置 slowlog 监控。

与 MySQL 协同

字段变更时删除 cache key;Hash 存 profile 比 String JSON 部分更新更省带宽。Session 注意 TTL 与安全随机 id。Week 6 后续讲穿透雪崩与 Kafka,本篇五结构是面试基础 vocabulary。

自检

设计:微博热搜 ZSet、签到 Bitmap、库存 String DECR。下一篇:week06-cache-patterns

知识卡片

问题

Redis String 底层 SDS 优势?

点击翻转查看答案

答案

O(1) 取长度、二进制安全、预分配减少 realloc;超过阈值编码为 int 或 embstr/raw。

问题

ZSet 如何实现有序?

点击翻转查看答案

答案

跳表 + 哈希表:哈希 O(1) 查 member 分数,跳表 O(log N) 范围与排名;也可 ziplist/listpack 压缩小集合。

问题

List 常见阻塞命令?

点击翻转查看答案

答案

BLPOP/BRPOP 阻塞弹出,用于简单队列;生产环境大规模用专业 MQ(Week 6 后半)。