外观
Redis 内存淘汰方案是什么
1.noeviction
这是 Redis
默认的内存淘汰策略。当内存使用量达到 maxmemory
配置的限制时,Redis
会拒绝新的写入操作并返回错误,不会淘汰任何现有数据。
- 适用场景:
- 数据非常重要,不能丢失。
- 内存资源充足,或者
Redis
实例的数据量较小。
2.allkeys-lru
在所有键中,基于最近最少使用(LRU
)算法淘汰数据。Redis
会淘汰最久未被访问的键。
- 适用场景:
- 缓存数据,且希望保留最近频繁访问的数据。
- 数据访问模式较为明显,热点数据需要保留。
3.allkeys-lfu
在所有键中,基于最少频率使用(LFU
)算法淘汰数据。Redis
会淘汰访问频率最低的键。
- 适用场景:
- 缓存数据,且访问频率差异较大。
- 希望保留高频访问的数据。
4.volatile-lru
仅在设置了过期时间的键中,基于 LRU
算法淘汰数据。
- 适用场景:
- 缓存数据有明确的过期时间。
- 希望优先淘汰即将过期的数据。
5.volatile-lfu
仅在设置了过期时间的键中,基于 LFU
算法淘汰数据。
- 适用场景:
- 缓存数据有明确的过期时间。
- 希望优先淘汰访问频率低的临时数据。
6.volatile-random
在设置了过期时间的键中随机选择淘汰。
- 适用场景:
- 不需要复杂的淘汰逻辑。
- 希望随机淘汰即将过期的数据。
7.allkeys-random*
在所有键中随机选择淘汰。
- 适用场景:
- 数据访问模式不明显,所有数据重要性相近。
- 希望简化淘汰逻辑。
8.volatile-ttl
在设置了过期时间的键中,淘汰 TTL
(剩余生存时间)最短的键。
- 适用场景:
- 数据有明确的过期时间。
- 希望优先淘汰即将过期的数据。
选择策略的建议
- 如果数据非常重要且不能丢失,建议使用
noeviction
策略。 - 如果需要缓存热点数据,
allkeys-lru
或allkeys-lfu
是较好的选择。 - 如果数据有明确的过期时间,
volatile-lru
或volatile-lfu
更为合适。