Redis 缓存过期和删除策略
2026-01-22 10:07 abce 阅读(2) 评论(0) 收藏 举报Redis 实现了多种过期删除策略,用来高效管理内存并确保最佳性能。理解这些机制对于构建可扩展的高性能应用至关重要。
Redis采用懒惰删除与主动删除策略的组合方案。它不会立即删除过期键,而是运用智能算法在性能与内存使用之间取得平衡。
过期删除的核心策略
1.惰性删除(Lazy Deletion)
惰性删除是主要机制,过期键仅在被访问时才会被移除。当客户端尝试访问键时,Redis会检查该键是否已过期,若已过期,则立即删除该键并返回NULL;不会进行后台扫描或主动删除。
惰性删除的优点:
·CPU开销极低
·无需后台处理
·适用于高频访问的键值
惰性删除的缺点:
·过期键值若永不被访问将造成内存浪费
·内存使用模式难以预测
2.主动删除(Active Deletion)
Redis定期扫描并清除过期键值以防止内存膨胀。Redis内部维护一个定时任务,默认每秒运行10次(通过配置hz控制)。定时任务中删除过期键逻辑采用了自适应算法,根据键的过期比例、使用快慢两种速率模式回收键。
算法实现细节:
·Redis每秒运行约10次过期检测循环
·每次循环从过期字典中随机抽取20个键值对
·若过期键值占比超25%,则重复执行上面的流程
·单次循环执行时间受限,以避免阻塞

配置
# Redis configuration for active expiration hz 10 # Frequency of background tasks (10 Hz = 10 times/second) active-expire-effort 1 # CPU effort for active expiration (1-10)
Redis 过期策略(驱逐策略)
当 Redis 达到内存限制时,会采用驱逐策略来释放空间:
# Configuration in redis.conf maxmemory 2gb maxmemory-policy allkeys-lru
1.策略类型
(1)noeviction(默认)
·不驱逐任何键
·内存达到上限时写入操作返回错误
·适用场景:不可丢失的关键数据
(2)allkeys-lru
·从所有键中移除最近最少使用的键
·适用场景:通用缓存场景
(3)allkeys-lfu
·移除访问频率最低的键
·适用场景:具有独特访问模式的应用程序
(4)volatile-lru
仅从设置了过期时间的键中移除最近最少使用键
适用场景:持久数据与临时数据混合存储
易失性-最近最少使用
(5)volatile-lfu
仅从设置了过期时间的键中移除访问频率最低的键
(6)allkeys-random
·随机移除键
适用场景:访问模式不可预测时
(7)volatile-random
随机移除设置了过期时间的键
(8)volatile-ttl
优先移除生存时间(TTL)最短的键
适用场景:时间敏感数据优先级处理
2.策略选择指导

主从集群过期机制
在Redis集群中,过期处理遵循特定模式。
主从过期流程:
·仅主节点执行主动过期循环
·主节点向从节点发送显式DEL命令
·从节点不独立执行键过期(惰性删除机制除外)


浙公网安备 33010602011771号