Redis内存回收策略,你真的懂嘛?

     Reids 所有的数据都是存储在内存中的,在某些情况下需要对占用的内存空间进行回
收。内存回收主要分为两类,一类是 key 过期,一类是内存使用达到上限(max_memory)
触发内存淘汰。

一、Key过期回收策略(过期策略)

Key值过期回收策略有以下三种方案:
1、定时回收:针对每个key值新增一个定时器,定时监听key值的过期时间。 
优点:及时    缺点:CPU开销大
2、惰性回收:key值在过期以后,不主动淘汰,只有被使用时,才去判断key是否过期,过期则回收。
优点:   CPU开销较少    缺点:内存浪费严重     
3、定期回收:针对所有key值,定时扫描,清理过期key。
优点:前两种的折中,可以配置,最优策略
对于redis,则只采用惰性回收策略和定期回收两种策略。

二、内存使用达到上限回收策略(淘汰策略)

LRU,Least Recently Used:最近最少使用的Key。判断最近被使用的时间,目前最远的数据优先被淘汰。

LFU,Least Frequently Used:最不常用的Key,优先被清理。

附录:

redis设置策略 含义
volatile-lru: 根据 LRU 算法删除设置了超时属性(expire)的键,直到腾出足够内存为止。如果没有 可删除的键对象,回退到 noeviction 策略。
allkeys-lru : 根据 LRU 算法删除键,不管数据有没有设置超时属性,直到腾出足够内存为止。
volatile-lfu: 在带有过期时间的键中选择最不常用的。
allkeys-lfu : 在所有的键中选择最不常用的,不管数据有没有设置超时属性。
volatile-random : 在带有过期时间的键中随机选择。
allkeys-random : 随机删除所有键,直到腾出足够内存为止。
volatile-ttl: 根据键值对象的 ttl 属性,删除最近将要过期数据。如果没有,回退到 noeviction 策略。
noeviction : 默认策略,不会删除任何数据,拒绝所有写入操作并返回客户端错误信息(error) OOM command not allowed when used memory,此时 Redis 只响应读操作

你可能感兴趣的:(redis,redis,数据库,database)