DBA Redis 清理策略

删除策略

基本介绍

​ Redis数据存放在内存中,具有3种删除策略:

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

定时删除

​ 之前介绍过几种对Redis的键做时效性的设置:

通用:
	expireat
	pexpireat
	
字符串:
	setex
	psetex
	
查询:
	TTL
	PTTL

​ 定时删除的策略无外乎对key做这种时效性操作,当到期后则执行自动删除的策略。

​ 优点:节约内存,到时就删,释放比较快速

​ 缺点:CPU压力大,在key到期时,无论CPU多么繁忙,它都会让CPU把自己立马删除,会影响Redis服务器响应时间和指令吞吐量

​ 总结:时间换空间,CPU性能换存储空间

惰性删除

​ 当数据到达过期时间后,不做任何处理,等待下次访问数据时做操作:

  1. 如果未过期,返回数据
  2. 如果过期了,删除,返回不存在

​ 优点:节约CPU性能,发现到了非删不可的时候才删

​ 缺点:内存压力大,会出现长期占用内存的数据

​ 总结:用存储空间换区处理器性能,也就是时间换空间

定期删除

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

​ 特点1:CPU性能占用设有峰值,检测频度可自定义设置

​ 特点2:内存压力不是很大,长期占用内存的冷数据会被持续清理

​ 总结:周期性抽查内存空间(随机抽查、重点抽查)

逐出算法

基本介绍

​ 逐出算法指的是当有新的数据进行插入,此时内存却又不足该怎么办。

​ 总共有8种逐出算法。

  • Redis使用内存存储数据,在执行每一个命令前,会调用freeMemoryIfNeeded()检测内存是否充足。如 果内存不满足新加入数据的最低存储要求,redis要临时删除一些数据为当前指令清理存储空间。清理数据 的策略称为逐出算法。
  • 注意:逐出数据的过程不是100%能够清理出足够的可使用的内存空间,如果不成功则反复执行。当对所 有数据尝试完毕后,如果不能达到内存清理的要求,将出现错误信息。

相关配置

​ 以下的配置是影响数据逐出的因素:

​ 1)最大可使用内存:

maxmemory

​ 占用物理内存的比例,默认为0代表不受限制,生成中建议设置为50%左右。

​ 2)每次选取待删除数据的个数:

maxmemory-samples

​ 选取数据时并不会全库扫描,因为这导致严重的性能消耗,降低读写性能。

​ 故采用随机获取数据的方式作为待检测删除数据

​ 3)删除策略

maxmemory-policy

​ 达到最大内存后,对被挑选出来的数据进行删除的策略

相关算法

检测易失数据(可能会过期的数据集server.db[i].expires ) :

  1. volatile-lru:挑选最近最少使用的数据淘汰
  2. volatile-lfu:挑选最近使用次数最少的数据淘汰
  3. volatile-ttl:挑选将要过期的数据淘汰
  4. volatile-random:任意选择数据淘汰

检测全库数据(所有数据集server.db[i].dict ):

  1. allkeys-lru:挑选最近最少使用的数据淘汰
  2. allkeys-lfu:挑选最近使用次数最少的数据淘汰
  3. allkeys-random:任意选择数据淘汰

放弃数据驱逐:

  1. no-enviction(驱逐):禁止驱逐数据(redis4.0中默认策略),会引发错误OOM(Out Of Memory)
posted @ 2021-04-02 16:56  云崖君  阅读(71)  评论(0编辑  收藏  举报