Redis官方文档06-内存回收策略


Redis的内存回收策略

1、惰性删除

2、定时任务删除

3、内存不够一般就是报错、LRU、随机删除、过期LRU、过期随机删、早过期被删

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Redis删除过期的KEY的方式
//默认是慢模式
int totalTime = 0;
boolean expired = false;
do {
随机检查20个KEY
} while (超过25%的KEY过期 && 执行总时间 < 25ms)
if 执行总时间 > 25ms {
expired = true;
}

//如果慢模式判断超时了,启动快模式
do {
随机检查20个KEY
} while (超过25%的KEY过期 && 执行总时间 < 1ms && 2秒内只运行1次)
2. 内存溢出控制策略

当Redis所用内存达到maxmemory上限时会触发相应的溢出控制策略。具体策略受maxmemory-policy参数控制,Redis支持6种策略,如下所示:

  1. noeviction:默认策略,当内存不足以容纳新写入数据时,新写入操作会报错。应该没人用吧。
  2. allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 Key。推荐使用,目前项目在用这种。
  3. allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 Key。应该也没人用吧,你不删最少使用 Key,去随机删。
  4. volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 Key。这种情况一般是把 Redis 既当缓存,又做持久化存储的时候才用。不推荐。
  5. volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 Key。依然不推荐。
  6. volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 Key 优先移除。不推荐。如果没有对应的键,则回退到noeviction策略。