当 Redis 内存使用达到 maxmemory 上限时,需要选择一种策略来腾出空间。以下是 8 种内置策略的交互式演示。
每次写入操作前,Redis 检查 used_memory 是否超过 maxmemory。如果未超限,正常写入。
根据当前选中的策略,从候选键集合中筛选可淘汰的键。
按照策略定义的排序规则,选出最应该被淘汰的键并删除。
释放足够空间后,新的键值对被写入内存。如果空间仍然不足,重复第 2-4 步。
不淘汰任何键。当内存满时,所有写入操作(SET、LPUSH 等)返回错误,只允许读操作和 DEL 等删除操作。
| 策略 | 范围 | 算法 | 适用场景 |
|---|
每个键记录最后一次被访问的时间戳。淘汰时选择最近最少使用的键。Redis 采用近似 LRU,随机采样 N 个键,选其中最久未被访问的。
每个键维护一个访问频率计数器。淘汰时选择访问频率最低的键。频率计数器会随时间衰减,保证热度时效性。
allkeys-lru(通用)或 allkeys-lfu(热点数据场景)
volatile-ttl 或 volatile-lru,避免淘汰持久化数据
noeviction,搭配监控告警做容量规划