Redis-内存淘汰策略

1、为什么需要内存淘汰?

redis的数据可以分为两种,一种不带过期时间,另一种带有过期时间,到期自动删除。假如redis的内存占用阈值为M,那么不带过期时间的数据太多或者带过期时间的数据没有及时删除,都可能导致内存溢出。

redis的过期删除策略:a、定期删除:redis会对设置了过期时间的数据定期扫描一边,如果发现有过期的,直接删除(定期-100ms 扫描也不是对所有数据全扫一遍,而是采取抽样的方式,抽取一定数量的key检查,如果过期比例超过某个值,继续抽取一定数量的key)

b、惰性删除:当获取某个数据时,发现它已经过期,直接删除

2、内存淘汰策略

1. noeviction:当内存使用超过配置的时候会返回错误,不会删除任何键

2. allkeys-lru:加入键的时候,如果过限,首先通过LRU算法删除最久没有使用的键

3. volatile-lru:加入键的时候如果过限,首先从设置了过期时间的键集合中删除最久没有使用的键

4. allkeys-random:加入键的时候如果过限,从所有key随机删除

5. volatile-random:加入键的时候如果过限,从过期键的集合中随机删除

6. volatile-ttl:从配置了过期时间的键中删除马上就要过期的键

7. volatile-lfu:从所有配置了过期时间的键中删除使用频率最少的键

8. allkeys-lfu:从所有键中删除使用频率最少的键

 

lru 和 lfu的区别:lru是使用时间维度, lfu主要是加上使用频率维度,因为不一定最近使用的key,使用频率就比其它key高

posted @ 2022-03-10 10:53  hugeQAQ  阅读(143)  评论(0编辑  收藏  举报