Redis删除策略与淘汰策略

Redis是一种内存级数据库,数据都存在内存中,但是针对于已经过期的数据,reids不会立刻删除Redis删除策略与淘汰策略_第1张图片

只是会存储在expires中,当执行删除策略的时候,才会从expires中寻找对应的数据存储的地址,在存储空间中找到对应的数据进行删除。

数据删除其实就是内存和CPU占用之间寻找平衡,CPU才能去处理事情,针对过期数据,要进行删除的时候,一半有三种策略

1.定时删除  顾名思义,当key设置有过期时间,时间到了,定时器任务立即执行删除,相当于消耗CPU来减少内存使用,拿时间换空间。

2.惰性删除 就是说,数据到达过期时间的时候,先不做处理,等到下次访问数据的时候,进行访问,如未过期,返回数据,如过期,则删除。这就相当于节约了CPU但占用了内存,拿空间换时间。

3.定期删除,就是以上两种的折中,Redis启动服务器初始化的时候,读取配置的server.hz的值,这个就是一秒钟执行的次数

每一秒钟执行server.hz次  ---->serverCron()----->databaseCron------->acticeExpireCycle()  对每一个expires检测,随机挑选W个key进行检测,如果key已经超时,则删除,要是这一轮中删除的key数量超过25%则循环这个过程,如果没有,则进入下一个expires检测。

Redis删除策略与淘汰策略_第2张图片

 

Redis删除策略与淘汰策略_第3张图片

数据淘汰策略

这个是redis内存不足的时,执行的,redis执行命令之前,都会用freeMemoryIfNeeded()方法,检测这次内存是否充足,如果不满足加入新数据,则会执行淘汰策略(淘汰未过期的数据)

检测易失去数据(一般是有定时,会过期的数据的)

    volatile-lru:挑选最近最少使用的数据淘汰
    volatile-lfu:挑选最近使用次数最少的数据淘汰
    volatile-ttl:挑选将要过期的数据淘汰
    volatile-random:任意选择数据淘汰

全库数据

     allkeys-lru:挑选最近最少使用的数据淘汰
     allkeLyRs-lfu::挑选最近使用次数最少的数据淘汰
     allkeys-random:任意选择数据淘汰,相当于随机

 

 

 

你可能感兴趣的:(Redis删除策略与淘汰策略)