Redis删除策略

卑微小吴励志写博客第29天。

删除策略

过期删除
redis中的数据特征
  • redis是一种内存级数据库,所有的数据均存储在内存中,通过TTL指令可以查看数据的状态。
    xx:具有时效性的数据
    -1:代表永久性数据
    -2:已经过期的数据 或 已经删除了的数据 或 未定义的数据

已经过期的数据真的被删除了吗?
在这里插入图片描述
redis让cpu处理很多指令的时候,cpu一下子处理不过来,但是删除的操作又没那么重要。所以就先没删,继续保存在内存中,什么时候删除呢?这就是redis的删除策略做的事,redis有三种删除策略。

时效性数据的存储结构
在这里插入图片描述
expires空间相当于是redis开辟的一个存放值的地址和对应过期时间的空间,删除策略相当于是维护下面这个空间中的东西,上面存的值不变。

删除策略的目标
在内存和cpu占用之间找到一个平衡,顾此失彼会造成整个redis的性能下降,甚至引发服务器宕机或者内存泄露。
就是在cpu闲的时候把那些过期的数据删除,忙的时候就不占用cpu了。

1、定时删除
  • 创建一个定时器,当key设置有过期时间,且过期时间到达时,由定时器立即执行对key的删除。
  • 在这里插入图片描述
    到点了就干掉expires中和上面的key值。用处理器性能换内存空间。

优点:

  • 节约内存,到点了就立即释放掉不必要的内存空间。

缺点

  • cpu的压力会很大,不会考虑删除的时候cpu是否空闲,会影响redis服务器的响应时间和吞吐量。
2、惰性删除
  • 数据到达过期时间,不做处理。等下次访问该数据时,发现未过期,则返回值;发现已经过期,删除(删除expires空间和key值),并返回不存在。

优点

  • 节约cpu性能,当数据必须删除的时候才删除。

缺点

  • 内存压力很大,出现过期数据会长期占用内存的情况。

其实就是拿内存换cpu性能。

3、定期删除

上面的两种方案都比较极端,要么牺牲空间,要么牺牲时间。有没有这种的方案?

- 当redis服务器初始化的时,读取配置server.hz

在这里插入图片描述

  • 周期性轮询redis库中的时效性数据,采用随机抽取策略,利用过期数据占比的方式控制删除的频度。

特点
1、CPU性能占用设置了峰值,检测频度可以自己配置。
2、内存压力不是很大,长期占用内存的冷数据会被持续清理。

总结:周期性抽查存储空间(随机抽查,重点抽查)。
redis内部用的是惰性删除和定期删除。

逐出算法

新数据进入redis时,如果内存不足怎么办?

redis使用内存存储数据,在执行每一条命令前,会调用freeMemoryIfNeeded()检测内存是否充足,如果内存不满足新加入数据的最低存储要求,redis要临时删除一些数据为当前指令清理存储空间。
注意
逐出数据的过程不是100%能成功,如果执行一次后内存任然无法到达要求,会再次执行,如果对所有数据尝试完毕后,还是不是达到内存的要求,会爆出错误。

在这里插入图片描述

影响数据逐出的相关配置

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200707223220147.png

数据逐出策略配置依据
  • 使用info命令输出监控信息,查询缓存hit和miss的次数,根据业务需求调优Redis配置。
    在这里插入图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值