Redis 内存淘汰策略交互式讲解

Redis 内存淘汰策略

当 Redis 内存使用达到 maxmemory 上限时,需要选择一种策略来腾出空间。以下是 8 种内置策略的交互式演示。

内存块可视化(共 32 个槽位)

带 TTL 的键(volatile) 不带 TTL 的键(non-volatile)
已用: 0/32
Volatile: 0
淘汰次数: 0
模拟速度:

事件日志

等待操作…

淘汰过程演示

第 1 步:内存检测

每次写入操作前,Redis 检查 used_memory 是否超过 maxmemory。如果未超限,正常写入。

第 2 步:选择候选集

根据当前选中的策略,从候选键集合中筛选可淘汰的键。

第 3 步:排序与淘汰

按照策略定义的排序规则,选出最应该被淘汰的键并删除。

第 4 步:写入新值

释放足够空间后,新的键值对被写入内存。如果空间仍然不足,重复第 2-4 步。

策略选择

noeviction

不淘汰任何键。当内存满时,所有写入操作(SET、LPUSH 等)返回错误,只允许读操作和 DEL 等删除操作。

策略速查表

策略范围算法适用场景

LRU vs LFU 原理

LRU(Least Recently Used)

每个键记录最后一次被访问的时间戳。淘汰时选择最近最少使用的键。Redis 采用近似 LRU,随机采样 N 个键,选其中最久未被访问的。

LFU(Least Frequently Used)

每个键维护一个访问频率计数器。淘汰时选择访问频率最低的键。频率计数器会随时间衰减,保证热度时效性。

选型建议

缓存场景

allkeys-lru(通用)或 allkeys-lfu(热点数据场景)

会话存储

volatile-ttl 或 volatile-lru,避免淘汰持久化数据

纯内存数据库

noeviction,搭配监控告警做容量规划