开发者学堂课程【Redis 入门到精通(进阶篇):删除策略-定期删除】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/765/detail/13440
删除策略-定期删除
内容介绍
一,删除策略的方法
二,删除策略比对
本章主要讲解数据删除策略的方法与删除策略的三个方法比对。
一,删除策略的方法
1.定期删除
拿空间换时间,拿时间换空间的两种方法都比较极端,定期删除是比较折中的方法。
此图为讲解定期删除:
定义:redis 启动服务器初始化时,读取配置 sever.hz 的值,默认为10。
(1).severCron()
这个默认值代表每秒钟执行 sever.hz 次severCron()。它是控制进度的,对服务器进行一个定时轮询。
(2).databasesCron()
轮询这个工作也叫做databasesCron(),继续对里边的每一个库进行录取,它会挨个访问这些信息访问。
(3).activeExpireCycle()
之后会对 databasesCron() 执行第三个操作,这个操作命名为activeExpireCycle(),activeExpireCycle() 对每一个 expire[*] 逐一进行检查,每次执行 250ms/sever.hz。也就是检查的时间定义为四分之一秒。
作用:对某个 expire[*] 检测时,随机挑选 W 个 key 检测。
(4).current_dp
参数 current_dp 用于记录activeExpireCycle() 进入哪个expire[*]执行。current_dp 专门保存当前的执行到位。举例为如果把零检查完,它会记下来。如果把一检查完它会记下来。这时到到期时,由于已经记住,会保障它的轮询,不会出现把某一个给落下的情况。
(5).注意点
①.如果 key 超时,则删除 key。
②.如果一轮中删除的key的数量大于 W*25%,循环该过程。
③.如果一轮中删除的 key 的数量小于等于 W*25%,检查下一个 expire[*],0-15循环。一个一个检查完是靠databasesCron() 来完成的,而检查任意一个是靠activeExpireCycle() 来完成的。
④.W取值=ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP属性值。也就是说,活动时长的周期查找一个循环次数。每次循环在里面找多少个就是它的一个随机策略。挑选 k 的数量就靠这个参数设定。
(6).总结
周期性轮询 redis 库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频度。
特点:①.CPU 性能占用设置有峰值,检测频度可自定义设置。②.内存压力并不是很大,长期占用内存的数据会被持续清理。
整体来说,周期性抽查储存空间(随机抽查,重点抽查)
二,删除策略比对
(1).定时删除
节约内存,无占用。不分时段占用 CPU 资源,频度高。总体来说,定时删除是拿时间换空间。
(2).惰性删除
内存占用严重。延时执行,CPU 利用率高。总体来说,惰性删除是拿空间换时间。
(3).定期删除
内存定期随机清理。每秒花费固定的 CPU 资源维护内存。总体来说,定期删除是用随机抽查,重点抽查。