20200419——Redis 删除策略

过期数据

redis中的数据特征

redis是一种基于内存的数据库,所有的数据均存放于内存中,内存中的数据可以通过TTL指令获取状态
xx:具有时效性的数据
-1: 永久有效的数据
-2:已经过期的数据 或 被删除的数据 或 未定义的数据

数据删除策略

定时删除
惰性删除
定期删除

redis存储数据的方式

在expire存储的东西为两个,一个内存的地址,另一个是过期时间
在这里插入图片描述

数据删除的目标:是在内存和cpu占用之间寻找一种平衡,顾此失彼都会造成redis的性能下降,甚至引发服务器宕机或者内存泄漏

定时删除

创建一个定时器,当key设置有过期时间,且过期时间到达,由定时器任务立即执行对键的删除操作

优点:节省内存,到时就进行删除,快速释放到不必要的内存
缺点:cpu压力很大,因为到时间就要删除,不考虑cpu负载量多高,均会占用cpu,会影响redis服务器响应时间和指令的吞吐量

用处理器的性能换取内存空间

惰性删除

数据到达过期时间,不作处理,等下次访问这条数据的时候
如果未过期,返回数据
如果已经过期,删除,返回不存在

优点:节约cpu性能
缺点:大量数据存在与内存中,

用存储器空间获取处理服务器性能

定期删除

折中方案

redis启动的时候,server.hz,默认值为10
每秒执行server.hz次操作 ,对服务器进行定时轮询,对expires进行轮询。逐个检查,随机选择出w个key进行检测,如果一轮中删除的key的数量> W*25,循环过程。如果这一轮删除的key小于w,检查下一个expires

W可以自己定义

周期性轮询redis数据库,进行随机抽取的策略,利用过期数据占比方式控制删除频度

特点1:cpu性能占用设置有峰值,检测频度可以自定义设置
特点2:内存压力不是特别大,长期占用内存的冷数据会被持续清理。

总结:周期性抽查空间(随机抽查,重点抽查)

逐出算法

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

redis在使用内存存储数据,在执行每一个命令前,会调用freeMemoryIfNedded()函数去检测空间是否充足。如果不满足新加入数据的最低存储要求,redis要求临时删除一些数据为当前指令清除空间,清理数据的策略为逐出算法

注意:逐出数据的过程不是100%能够清理出足够的可使用的内存空间,如果不成功就反复执行,当对所有的数据尝试完毕,如果还不能达到内存清理的要求,将出现错误信息。

相关影响逐出的相关配置

maxmemory

占用物理比例为0,表示不限制,生产环境通常在50%以上

每次待选取删除数据的个数

maxmemory-samples

选取数据的时候并不会全库扫描,导致严重的性能消耗,降低读写性能,因此采用随机获取数据的方式作为待检测删除数据。

删除策略

maxmemory-policy

达到最大内存之后,选择的删除策略

检测易失数据(可能会过期的数据集)

在这里插入图片描述

检测全库数据

在这里插入图片描述

放弃驱逐数据

在这里插入图片描述

数据逐出策略配置依据

使用INFO命令输出监控信息,查询缓存hit和miss的次数,根据业务需要调优Redis配置

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值