为什么要清洁Redis
Redis是基于内存上进行数据的操作的,并非像以往我们所安装的底层数据库一样存在磁盘上的。在机子中,缓存的容量是有限的。 比较起存储在磁盘,其可存储量会小很多很多,随着程序的运行,缓存的数据只会越来越多,而因为容量有限我们不能无节制的存下去,因此需要对部分缓存的数据进行清理,以提供空间给新的数据进行缓存。
如何清洁
一、定时删除
在Redis缓存的数据中,几乎所有数据都会被标上一个过期时间,而这个过期时间是作为Redis清理数据腾出空间的一个重要依据。
定时删除的原理在于:为数据设置一个过期时间。每过一个时间周期,Redis会随机遍历一部分数据,当检测到数据已经到达了过期时间后,Redis就会将这些数据清除掉。 (为什么是随机遍历:如果全部遍历,十分耗费时间,影响性能)
每过一个时间周期,Redis都会遍历一部分数据,并对这部分数据中到达了过期时间的数据进行清除。具体如上图所示。而从图中我们也可以看到该方法是存在一定的弊端的。因为是随机遍历一部分数据,所以可能会有些已过期但从来都没被遍历到的数据存在,而这些陈年老数据一直不会被清除,占用在内存中。
二、惰性删除
惰性删除与定时删除有种组合拳的意思。
惰性删除的原理在于:当有请求访问到了一个已到达过期时间且未被清理的数据时,Redis就会检测到这个过期数据并进行清除。
如图所描述的,当有外来的请求访问到该数据时,若检测到过期时间已经到达,Redis就会删除这个数据。惰性删除也有着一个缺陷,如果一些陈年老数据一直未被请求访问到, 则该数据可能永远都不会被删除。
三、内存淘汰策略
在定时删除与惰性删除这套组合拳下,解决了极大部分的Redis清洁工作。但由于两者所存在的不足之处,很可能会出现永远没被删除的陈年且无用的老数据,这种数据很可能会随着业务的增加而越堆越多,这十分浪费我们宝贵的内存资源。
在解决这个问题上,我们使用到了Redis所提供的内存淘汰策略,为完成Redis的清理补上最后的一块拼图。
Redis一共提供了8种内存淘汰策略。如下图所示
使用时,首先在配置文件redis.conf 中,参数 maxmemory 来设定最大内存,当达到最大内存后就会触发内存淘汰策略。然后通过设置 maxmemory-policy 来指定使用哪种内存淘汰策略。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2019-03-15 什么是Java序列化,如何实现java序列化
2019-03-15 Java序列化机制原理
2019-03-15 JAVA不可变类(immutable)机制与String的不可变性
2019-03-15 理解Java中的引用传递和值传递
2019-03-15 数据库--思维导向图
2019-03-15 利用Sharding-Jdbc实现分表
2019-03-15 数据库优化的几个阶段