redis内存淘汰(回收)机制

内存回收体现在两个方面

1:对过期key的回收:

   分为两种结合:定期删除+惰性删除

     定期好理解,默认100s就随机抽一些设置了过期时间的key,去检查是否过期,过期了就删了。

惰性删除,见名知意,惰性嘛,我不主动删,我懒,我等你来查询了我看看你过期没,过期就删了还不给你返回,没过期该怎么样就怎么样。

存在问题:有些key一直没有被随机扫到,也没有再访问过,通过上面的当时就无法回收,这时候需要内存淘汰机制

    

2:内存达到上限后出发内存溢出控制策略

1)noeviction:默认策略,不会删除任何数据,拒绝所有写入操作并返

回客户端错误信息(error)OOM command not allowed when used memory,此

时Redis只响应读操作。

2)volatile-lru:根据LRU算法删除设置了超时属性(expire)的键,直

到腾出足够空间为止。如果没有可删除的键对象,回退到noeviction策略。

3)allkeys-lru:根据LRU算法删除键,不管数据有没有设置超时属性,

直到腾出足够空间为止。

4)allkeys-random:随机删除所有键,直到腾出足够空间为止。

5)volatile-random:随机删除过期键,直到腾出足够空间为止。

6)volatile-ttl:根据键值对象的ttl属性,删除最近将要过期数据。如果

没有,回退到noeviction策略。

如果没有键满足回收的前提条件的话,策略volatile-lruvolatile-random以及volatile-ttl就和noeviction 差不多了。

你可能感兴趣的:(redis内存淘汰(回收)机制)