文章图片
【删除|一文读懂Redis内存淘汰策略】
文章图片
Redis内存淘汰的必要性我们都知道redis的性能很高 , 最主要的原因之一就是redis的数据都在内存中放着 , 我们在从redis中获取数据或者更新redis中的数据时 , 都是操作的内存中的数据 。 而当内存被占满了之后怎么办呢?这时就有必要将一些数据清理掉 , 以便新的数据能够放到redis中 。 而清理掉哪些数据?保留哪些数据?什么时候清理?如何配置这些策略?这些就是接下来要研究的内容 。
Redis的key过期策略Redis中可以为key设置过期时间 , 当到达过期时间后 , 就需要将这个key删除掉 。 Redis中提供了两种过期删除策略:惰性删除和定期删除 。
- 定期删除
- 从过期字典中随机选出20个key;
- 删除这20个key中已经过期的key;
- 如果过期的key的比例超过了1/4 , 那就重复从步骤1开始执行 。
正是由于使用了这种扫描策略 , 定期删除可能会造成很多已经过期的key无法及时删除 , 所以就有了接下来的惰性删除策略 。
- 惰性删除
不管是定期删除还是惰性删除 , 都是一种不完全精确的删除策略 , 始终还是会存在已经过期的key无法被删除的场景 。 而且这两种过期策略都是只针对设置了过期时间的key , 不适用于没有设置过期时间的key的淘汰 , 所以 , Redis还提供了内存淘汰策略 , 用来筛选淘汰指定的key 。
Redis内存淘汰策略我们在之前的文章中学习过两种内存淘汰算法:LRU算法详解和LFU算法详解 , redis提供的内存淘汰策略中就有一部分是基于这两种算法实现的 , 如果对这两种算法不太熟悉 , 可以先学习下这两篇文章的内容 。 Redis目前共提供了8种内存淘汰策略 , 其中有两种基于LFU算法的策略是Redis4.0版本之后增加的 。 接下来让我们一起了解下这8种淘汰策略: