继续我们的 Redis 内核探索之旅。本章我们不讲业务只聊数据安全性与内存韧性。 中篇目录提问六Redis 的持久化机制底层原理和配置方式RDB 持久化修改数据是如何保证异步子进程数据冲突的提问七Redis 过期策略有哪三种为什么选择惰性删除和定期删除策略提问八Redis 的内存淘汰策略和过期策略区别有哪些策略六、Redis 的持久化机制底层原理和配置方式RDB 持久化修改数据是如何保证异步子进程数据冲突的Redis 提供了两种核心持久化机制RDB快照与AOF日志以及 4.0 版本引入的混合持久化。1. RDBRedis DataBase—— 全量快照原理在触发条件如save 900 1满足时主进程fork()一个子进程由子进程将当前内存数据写入一个压缩的二进制 RDB 文件。配置confsave 900 1 save 300 10 save 60 10000 dbfilename dump.rdb rdbcompression yes2. AOFAppend Only File—— 写命令日志原理将每一条写命令如SET、HSET以文本格式追加到 AOF 文件末尾。核心同步策略appendfsyncalways每次写入都刷盘最安全最慢。everysec每秒刷盘一次推荐最多丢 1 秒数据。no交由操作系统调度最快但可能丢大量数据。AOF 重写当 AOF 文件膨胀时触发后台重写bgrewriteaof瘦身。3. 混合持久化Redis 4.0配置aof-use-rdb-preamble yes。AOF 重写时文件头部直接写入 RDB 格式的快照尾部追加增量 AOF 日志重启时恢复速度极快。4. 如何保证异步子进程数据不冲突写时复制 COW这是最精妙的设计执行bgsave或bgrewriteaof时主进程fork()子进程父子进程共享同一份物理内存页表。父进程继续处理写入请求。当父进程要修改某个内存页时操作系统触发写时复制Copy-On-Write将该页物理内存复制一份副本给父进程修改。子进程从头到尾读取的都是fork()那一刻的旧内存页快照。两者互不干扰完美解决数据冲突七、Redis 过期策略有哪三种为什么选择惰性删除和定期删除策略理论上的三种删除策略定时删除Key 过期立即创建定时器删除。对 CPU 极不友好被 Redis 抛弃。惰性删除访问 Key 时才检查是否过期过期则删除。对 CPU 友好对内存不友好过期但永不访问的 Key 会常驻内存。定期删除每隔 100ms由hz参数控制随机抽取一批设置了 TTL 的 Key 检查删除。折中方案。Redis 最终选择惰性删除守门员 定期删除巡逻队这是一种CPU 与内存的务实权衡用惰性删除保证 CPU 绝对不被额外消耗。用定期删除默认每秒 10 次每次抽 20 个 Key删除超过 5 个则继续循环但总耗时不超过 25ms防止内存被过期 Key 撑爆。两者结合确保系统在面对千万级 Key 时依然稳定高效。八、Redis 的内存淘汰策略和过期策略区别有哪些策略核心区别面试高频陷阱过期策略Expiration处理TTL 到达 0的 Key是主动清理“垃圾”。淘汰策略Eviction处理内存达到maxmemory上限时的窘境无论 Key 是否过期强制“扔东西”腾空间。Redis 的 8 种内存淘汰策略分类策略名称行为默认noeviction拒绝写入返回错误默认策略全键Allkeysallkeys-lru淘汰最近最少使用的 Key最推荐全键allkeys-lfu淘汰访问频率最低的 Key4.0更精准全键allkeys-random随机淘汰过期键Volatilevolatile-lru只在有 TTL 的 Key 中淘汰 LRU过期键volatile-lfu只在有 TTL 的 Key 中淘汰 LFU过期键volatile-random只在有 TTL 的 Key 中随机淘汰过期键volatile-ttl淘汰剩余生存时间最短的 Key调优参数maxmemory-samples 5默认采样 5 个调高至 10 可提升淘汰精准度但稍耗 CPU。 中篇总结与预告中篇我们剥开了持久化的外衣看到了fork()与写时复制的操作系统级魔法也理清了过期与淘汰的本质区别。下篇终章我们将直面缓存架构师的终极考验五种数据类型的场景博弈、分布式锁的 Redisson 底层原理、排行榜算法以及如何用布隆过滤器、互斥锁、熔断降级彻底干掉缓存三大杀手穿透、击穿、雪崩。