一.key的过期删除策略
①定期删除:隔一段时间,就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。
定期删除有个弊端:
过期的key,但是没有被定期删除检测到,就会导致redis占用的内存空间越来越大,那么就有了惰性删除
②惰性删除:redis get到的key,会判断一下该key是否过期了,如果过期了那么就删除这个key。
使用定期删除和惰性删除两种策略可以很好的利用cpu,
但是会导致过期的key没有被访问到,但是也没有被定期抽取到,导致占用的内存越来越大,从而内存不足。那么就有了key的淘汰策略
二.key的淘汰策略
触发淘汰策略:占用的内存超过指定的maxmemory之后
怎么设置淘汰策略:设置maxmemory_policy参数
1.volatile-lru:最近最少使用算法,从设置了过期时间的键中选择空转时间最长的键值对清除掉
2.volatile-lfu:从设置了过期时间的键中选择某段时间之内使用频次最小的键值对清除掉
3.volatile-ttl:在设置过期key中删除过期时间最早的
4.volatile-random:在设置过期key中随机删除
5.allkeys-lru:所有的key中,选择空转时间最长的键值对清除掉
6.allkeys-lfu:所有的key中,选择某段时间之内使用频次最小的键值对清除掉
7.allkeys-random:在所有key中随机删除
8.noeviction:不做任何的清理工作,在redis的内存超过限制之后,所有的写入操作都会返回错误,但是读操作都能正常的进行
redis默认是第8中淘汰策略