Redis过期策略

1. 定期清除

redis默认每隔100ms就随机的抽取一些设置了过期事件的key,检查其是否过期,如果过期就进行清除。**存在的问题:**定期清除可能会导致过多过期key到了时间并没有删除掉。

2. 惰性清除

在获取key的时候,redis才进行检查是否过期。如果过期了,key也没被查询。那么这个key还是会存在于内存中。

定期清除 + 惰性清除 可以保证过期的数据一定被删掉。

3. 内存淘汰

缓存淘汰算法–LRU算法

3.1 volatile-lru

从设置过期时间的数据集(server.db[i].expires)中挑选出最近最少使用的数据淘汰。没有设置过期时间的key不会被淘汰,这样就可以在增加内存空间的同时保证需要持久化的数据不会丢失。

3.2 volatile-ttl

除了淘汰机制采用LRU,策略基本上与volatile-lru相似,从设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰,ttl值越大越优先被淘汰。

3.3 volatile-random

从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰。当内存达到限制无法写入非过期时间的数据集时,可以通过该淘汰策略在主键空间中随机移除某个key。

3.4 allkeys-lru

从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰,该策略要淘汰的key面向的是全体key集合,而非过期的key集合。常用

3.5 allkeys-random

从数据集(server.db[i].dict)中选择任意数据淘汰。

3.6 no-enviction

禁止驱逐数据,也就是当内存不足以容纳新入数据时,新写入操作就会报错,请求可以继续进行,线上任务也不能持续进行,采用no-enviction策略可以保证数据不被丢失,这也是系统默认的一种淘汰策略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值