目录
[2. 十大数据类型全解析](#2. 十大数据类型全解析)
[3. 高可用三板斧](#3. 高可用三板斧)
[4. 事务、脚本与函数](#4. 事务、脚本与函数)
[5. 持久化双保险](#5. 持久化双保险)
[6. 性能调优](#6. 性能调优)
[7. 安全与合规](#7. 安全与合规)
[8. 典型场景与模式](#8. 典型场景与模式)
[9. 云原生与生态](#9. 云原生与生态)
[10. 故障排查与黑魔法](#10. 故障排查与黑魔法)
[11. 结语](#11. 结语)
1.内存为王:架构与数据模型
1.1 单线程事件循环
• 基于 epoll/kqueue 的 Reactor 模型,网络 IO 多路复用。
• 单线程避免锁竞争,6.0 引入多线程 IO(默认关闭)。
1.2 六种底层编码
• SDS(简单动态字符串)、intset、ziplist、quicklist、skiplist、listpack。
• 自动升级:小数据用 ziplist,大数据转 hashtable/skiplist,透明无感。
1.3 内存布局
• jemalloc 分配,64 字节对齐;key 与 value 均用 robj 包装。
• 内存上限:maxmemory + 八类淘汰策略(LRU、LFU、TTL、Random...)。
2. 十大数据类型全解析
2.1 String
• 最大 512 MB;可存 JSON、二进制、整数。
• 原子命令:INCR、SETNX(分布式锁)、GETDEL。
2.2 Hash
• 小 Hash 用 ziplist,大 Hash 转 hashtable。
• HINCRBYFLOAT 实现用户余额。
2.3 List
• quicklist = ziplist + 双向指针;LPUSH/RPOP 天然队列。
• 阻塞 API:BLPOP 做简易消息队列。
2.4 Set
• 去重集合;SINTER/SUNION 实现共同好友。
2.5 Sorted Set
• skiplist + dict 双结构;ZRANGEBYSCORE 排行榜毫秒级。
2.6 HyperLogLog
• 12 KB 内存估算 2^64 UV 误差 0.81%。
2.7 GEO
• GEOADD、GEORADIUS 基于 ZSet + geohash。
2.8 Bitmap
• SETBIT 按位统计日活;BITCOUNT 1 亿位 10 ms。
2.9 Bitfield
• 支持 i64/u64 位运算,做计数器溢出保护。
2.10 Stream
• 日志抽象:XADD、XREADGROUP、消费者组。
• 提供消息确认、消息回溯,媲美 Kafka。
3. 高可用三板斧
3.1 主从复制
• 全量同步 RDB + 增量同步缓冲区(backlog)。
• PSYNC2 部分重同步,断线 5 分钟也无需全量。
3.2 Sentinel
• 三节点哨兵监控主库,投票 failover < 30 s。
• 客户端集成 JedisSentinelPool、lettuce Sentinel。
3.3 Redis Cluster
• 16384 槽位,CRC16(key) mod 16384。
• Gossip 协议去中心化;支持在线迁移槽位。
• 故障转移:主库下线 → 从库选举 → 槽位漂移。
4. 事务、脚本与函数
4.1 MULTI/EXEC
• 原子性但不支持回滚,出错继续执行后续命令。
• WATCH/CAS 实现乐观锁。
4.2 Lua 脚本
• EVAL "return redis.call('incr', KEYS[1])" 1 mycounter
• 脚本在服务器端缓存 SHA1,减少网络往返。
4.3 Redis Functions(7.0+)
• 将 Lua 持久化到 .so 文件,重启不丢失,支持版本管理。
5. 持久化双保险
5.1 RDB
• 时点快照,fork 子进程,写时复制。
• 适合冷备、快速重启,5 GB 数据 2 s 加载。
5.2 AOF
• 追加写命令,fsync 策略:always/everysec/no。
• 重写机制:bgrewriteaof 压缩历史。
5.3 混合模式(4.0+)
• RDB + AOF 头部,重启先加载 RDB 再 replay AOF。
• 兼顾速度与数据完整性。
6. 性能调优
6.1 内存
• maxmemory 设机器 60%;碎片率 > 1.5 用 ACTIVATE DEFRAG。
• 32 GB 以上建议开启 --enable-large-pages。
6.2 网络
• 6.0 io-threads 4 核可提升 50% QPS。
• TCP backlog 65535;开启 SO_REUSEPORT。
6.3 过期策略
• 定期抽样 + 惰性删除;lazyfree-lazy-user-del 防止阻塞。
6.4 慢查询
• slowlog-log-slower-than 100 μs;slowlog-max-len 1000。
• latency monitor 记录 fork、AOF fsync 延迟尖刺。
7. 安全与合规
7.1 ACL
• 用户 + 命令 + 键模式;default 用户禁用危险命令 FLUSHALL。
7.2 TLS
• stunnel 退场,原生支持 SSL/TLS 1.3;双向证书认证。
7.3 审计
• ACL LOG 查看拒绝记录;Redis Enterprise 支持 SIEM 集成。
7.4 加密
• 透明加密(TEE)需企业版;社区版可用 KeyDB + LUKS。
8. 典型场景与模式
8.1 缓存
• Cache-Aside:读时回源,写时删缓存。
• 双写一致性:延迟双删、Binlog + Canal 异步更新。
8.2 分布式锁
• SET key uuid NX PX 30000 + Lua 原子释放。
• Redlock 算法:多实例过半获取。
8.3 限流器
• 令牌桶:INCR + EXPIRE;滑动窗口:ZSET 存时间戳。
8.4 消息队列
• Stream 消费者组:XGROUP CREATE mq mygroup $ MKSTREAM
• 阻塞读取:XREADGROUP GROUP mygroup consumer BLOCK 5000 COUNT 100 STREAMS mq >
8.5 实时排行榜
• ZINCRBY rank:2025-08 1 user:123
• ZREVRANGE rank:2025-08 0 99 WITHSCORES
8.6 布隆过滤器
• RedisBloom 模块 BF.ADD / BF.EXISTS,内存节省 90%。
9. 云原生与生态
9.1 Redis Cloud
• 自动扩缩容、Active-Active CRDT、99.999% SLA。
9.2 KeyDB
• 多线程 fork-less snapshot,QPS 提升 5×。
9.3 Dragonfly
• 基于 BSL 协议,单节点 4 TB 内存,兼容 Redis API。
9.4 Kubernetes
• Redis Operator、K8s StatefulSet + Sentinel;持久卷用 NVMe-oF。
10. 故障排查与黑魔法
10.1 内存爆满 OOM
• 检查 bigkeys:redis-cli --bigkeys
• 删除大 key:UNLINK key
异步释放。
10.2 主从数据不一致
• 比对 RDB 校验和;使用 redis-full-check。
10.3 连接数暴涨
• 客户端未关闭连接?启用 tcp-keepalive 60。
10.4 阻塞命令
• 使用 CLIENT LIST 找到 cmd=BLPOP 的 idle 时间。
10.5 延迟抖动
• 开启 latency-monitor,定位 fork、aof-fsync、expire-cycle。
11. 结语
Redis 用一块内存撬动了整个实时世界:缓存、消息、排行榜、限流、会话、分布式锁......
它简单到新手 5 分钟能上手,又复杂到内核黑客能读半年源码。
愿你用 Redis 把延迟压到亚毫秒,把并发推到百万级,把产品体验做到极致。
内存有限,创意无限,我们在 1 和 0 的世界里,继续飞驰。