Skip to content
← 返回Redis列表
数据与原子性

Redis 原理深入 ​

掌握 base 基础 和 plus 数据类型 后,可以沿着“数据怎么存、命令怎么执行、故障后留下什么”理解原理。

数据类型与底层编码 ​

数据类型决定命令语义,编码决定内部表示。同一种类型可能因数据量、元素大小、配置或版本使用不同编码。不能把“Hash 类型”直接等同于“始终采用哈希表”,也不能把内部结构名称当成新的一种业务类型。

可在实验服务用 TYPE key 查看类型,用 OBJECT ENCODING key 观察编码,用 MEMORY USAGE key 估算该键占用。比较时同时记录版本、元素数量与大小,不能仅凭一个小样本推断所有数据的内存成本。

参考:内存优化、OBJECT ENCODING。

执行模型与延迟 ​

命令执行、网络 I/O、后台持久化和内存释放属于不同工作。分析性能时,应区分服务端处理耗时与客户端观察到的总耗时;网络、连接等待和返回数据大小也会影响延迟。

先检查慢命令、大量返回和长脚本,再结合客户端指标定位。Pipeline 减少往返次数,但不会降低单条复杂命令本身的计算成本,也不提供事务隔离。

继续阅读:执行模型与慢请求、延迟与内存排查。

过期与内存淘汰 ​

过期解决数据的时间有效性,淘汰解决达到内存限制时如何腾出空间。设置了 TTL 的键可能在到期之前因淘汰被删除;没有 TTL 的键也不意味着能在所有淘汰策略下永久保留。

maxmemory 和策略需要匹配业务用途。可重建缓存与不能随意丢失的限额、锁状态,往往需要不同的容量与隔离策略。选择 noeviction 也需要应用处理写入失败,不能把失败留给业务偶然发现。

参考:内存淘汰。

持久化与恢复代价 ​

快照和 AOF 都会引入磁盘、内存和后台任务成本。理解它们时要分别检查写入成功、同步磁盘、备份生成和恢复完成这几个时刻;客户端收到成功响应,不代表独立备份已经包含该写入。

继续阅读:RDB 与 AOF 的恢复边界 和 独立恢复实验。

复制、Sentinel 与 Cluster ​

机制主要解决的问题必须考虑的边界
主从复制将主节点的变化传播给副本通常异步,读副本可能看到旧数据,切换可能丢失未复制写入
Sentinel非 Cluster 部署中的监控与自动故障切换不负责把数据分片;客户端需要支持发现当前主节点
Cluster按哈希槽分布数据并管理节点故障多键操作通常要求同槽,客户端需要处理重定向

复制不能替代备份,自动切换也不能直接推导出强一致或零数据丢失。学习时应画出“写主节点 → 复制 → 主节点故障 → 副本接管”的时序,检查各时刻哪些数据可能尚未传播。

本页说明机制,不包含已执行的多节点部署实验。实际搭建需要按版本文档确认拓扑、网络、客户端与恢复方案。

参考:复制、Sentinel、Cluster。

继续阅读