回收进程如何工作
理解回收进程如何工作是非常重要的:
一个客户端运行了新的命令,添加了新的数据。
Redi检查内存使用情况,如果大于maxmemory的限制, 则根据设定好的策略进行回收。
一个新的命令被执行,等等。
所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断地回收回到边界以下。
如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保存到一个新的键),不用多久内存限制就会被这个内存使用量超越。
Redis 内存设置
我们都知道如果我们要设置 Redis 的最大内存大小只需要在配置文件redis.conf 中配置一行 maxmemory xxx 即可,或者我们通过 config set 命令在运行时动态配置 Redis 的内存大小。
Redis 内存过期策略
noeviction : 不会清除旧数据, Redis 的默认策略;,当达到最大内存的时候,在增加新数据的时候会返回 error。
volatile-rtl: 淘汰最早会过期的数据(过期集合的键) 。
volatile-random: 随机淘汰数据(过期集合的键)。
volatile-lru: 淘汰最近使用最少的数据(过期集合的键)。
allkeys-random : 随机淘汰数据,这个策略不常用 。
allkeys-lru : 淘汰最近使用最少的数据。
根据具体场景选择策略