一、概述
缓存淘汰策略是在 Redis 达到最大内存限制时,决定哪些数据需要被移除以便为新数据腾出空间的策略。
这些策略通过配置文件或命令进行设置, 以保证 Redis 在有限的内存环境下能够平稳运行。
二、各种淘汰策略介绍
Redis提供了8种淘汰策略,可以分成两大类:
1、针对所有键的策略:对所有键进行选择和淘汰。
2、仅针对有过期时间的键的策略:只在设置了过期时间的键中选择淘汰对象。
以下具体策略:
1. noeviction
-
描述:达到内存限制时,不再执行删除操作,直接拒绝所有写入请求(包括插入和更新)。
-
适用场景:希望数据永不丢失的场景,但需要保证内存充足,否则会导致写入操作失败。
2. allkeys-lru(最近最少使用)
-
描述:在所有的键中使用 LRU算法,删除最近最少使用的键。
-
适用场景:适合缓存场景,保留频繁访问的键,逐出很少被访问的键。
3. allkeys-lfu(最少使用频率)
-
描述:在所有键中使用 LFU 算法,删除使用频率最低的键。
-
适用场景:适用于需根据使用频率进行淘汰的场景,更关注访问次数而非访问时间。
4. volatile-lru(最近最少使用)
-
描述:仅对设置了过期时间的键使用 LRU 算法。
-
适用场景:适合缓存一些有过期时间的数据,希望根据访问频率来进行内存管理的场景。
5. volatile-lfu(最少使用频率)
-
描述:仅对设置了过期时间的键使用 LFU算法。
-
适用场景:同 volatile-lru,但更关注使用频率。
6. allkeys-random
-
描述:在所有键中随机选择删除某个键。
-
适用场景:适用于缓存数据访问频率没有明显差异的情况。
7. volatile-random
-
描述:在所有设置了过期时间的键中随机选择删除某个键。
-
适用场景:适合缓存带有过期时间的数据,删除哪个数据不重要的场景。
8. volatile-ttl
-
描述:在设置了过期时间的键中,优先删除剩余生存时间(TTL)较短的键。
-
适用场景:适合希望优先清理即将过期的数据的场景。
三、内存淘汰策略的配置
Redis提供两种配置方式:
-
配置文件修改:在
redis.conf
配置文件中修改# 最大内存配置(不设置maxmemory或者设置为0的时候对内存使用没有限制) maxmemory 100mb # 淘汰策略配置 maxmemory-policy allkeys-lru
-
命令设置:
设置最大内存(不设置maxmemory或者设置为0的时候对内存使用没有限制)
config set maxmemory 1000
获取当前内存淘汰策略
config get maxmemory-policy
修改淘汰策略
config set maxmemory-policy allkeys-lru
四、缓存淘汰工作原理
1、客户端执行新命令新增数据。
2、Redis 检查内存使用情况,如果超出限制根据策略驱逐 key。
3、完成新命令的执行,并重复上述过程。
因此,我们不断跨越内存限制的边界,通过超过内存限制,然后淘汰策略回到限制以下。
五、总结
根据不同的应用场景,开发者可以选择合适的策略来确保 Redis 在内存达到上限时,能够高效地管理数据并维持系统的稳定性。
官方文档:Key eviction | Docs (redis.io)
标签:场景,策略,过期,Redis,缓存,内存,淘汰 From: https://www.cnblogs.com/Oct16/p/18472630