Redis的清洁——定期删除+惰性删除+内存淘汰策略

为什么要清洁Redis

Redis是基于内存上进行数据的操作的,并非像以往我们所安装的底层数据库一样存在磁盘上的。在机子中,缓存的容量是有限的。 比较起存储在磁盘,其可存储量会小很多很多,随着程序的运行,缓存的数据只会越来越多,而因为容量有限我们不能无节制的存下去,因此需要对部分缓存的数据进行清理,以提供空间给新的数据进行缓存。

如何清洁

一、定时删除

在Redis缓存的数据中,几乎所有数据都会被标上一个过期时间,而这个过期时间是作为Redis清理数据腾出空间的一个重要依据。
定时删除的原理在于:为数据设置一个过期时间。每过一个时间周期,Redis会随机遍历一部分数据,当检测到数据已经到达了过期时间后,Redis就会将这些数据清除掉。 (为什么是随机遍历:如果全部遍历,十分耗费时间,影响性能)
定时删除

每过一个时间周期,Redis都会遍历一部分数据,并对这部分数据中到达了过期时间的数据进行清除。具体如上图所示。而从图中我们也可以看到该方法是存在一定的弊端的。因为是随机遍历一部分数据,所以可能会有些已过期但从来都没被遍历到的数据存在,而这些陈年老数据一直不会被清除,占用在内存中。

二、惰性删除

惰性删除与定时删除有种组合拳的意思。
惰性删除的原理在于:当有请求访问到了一个已到达过期时间且未被清理的数据时,Redis就会检测到这个过期数据并进行清除。
惰性删除
如图所描述的,当有外来的请求访问到该数据时,若检测到过期时间已经到达,Redis就会删除这个数据。惰性删除也有着一个缺陷,如果一些陈年老数据一直未被请求访问到, 则该数据可能永远都不会被删除。

三、内存淘汰策略

在定时删除与惰性删除这套组合拳下,解决了极大部分的Redis清洁工作。但由于两者所存在的不足之处,很可能会出现永远没被删除的陈年且无用的老数据,这种数据很可能会随着业务的增加而越堆越多,这十分浪费我们宝贵的内存资源。
在解决这个问题上,我们使用到了Redis所提供的内存淘汰策略,为完成Redis的清理补上最后的一块拼图。
Redis一共提供了8种内存淘汰策略。如下图所示
内存淘汰策略
使用时,首先在配置文件redis.conf 中,参数 maxmemory 来设定最大内存,当达到最大内存后就会触发内存淘汰策略。然后通过设置 maxmemory-policy 来指定使用哪种内存淘汰策略。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值