第9章 数据库

9.5过期键删除策略

  1. 定时删除在设置键的过期时间的同时创建一个定时器,让定时器在键的过期时间来临时,立刻执行对键的删除操作。
  2. 惰性删除放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话就删除该键,如果没有过期就返回该键
  3. 定期删除。每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,就由算法决定。

定时删除策略

优点:对内存是最友好的,通过使用定时器定时删除策略,可以保证过期键会尽可能的被删除并释放过期键所占用的内存。

缺点:对cpu时间是最不友好的,在过期键比较多时删除过期键这一行为可能占用相当一份cpu,在内存不紧张时,但是cpu非常紧张的情况下,将cpu时间用在删除和当前任务无关的过期键上,无疑会对服务器的响应时间和吞吐量造成影响。

另:创建一个定时器需要用到reads服务器中的时间事件,而当前时间事件的实现方式无序列表。查找一个事件的时间复杂度为哦(N),并不能高效的处理大量时间事件。因此,要让服务器创建大量的定时器,从而实现定时删除策略,对现阶段来说并不现实。

惰性删除

优点:对cpu友好

缺点:多内存不友好

定期删除

从上面对定时删除和惰性删除的讨论来看,这两种方式在单一使用时都有明显的缺陷,定时删除占用太多cpu时间,影响服务器的响应时间和吞吐量惰性,删除浪费太多,内存有内存泄露的风险。

定期删除策略是前两种策略的一种整合和折中。定期删除策略,每隔一段时间执行一次删除过期键操作,并通过删除操作执行的时长和频率来减少删除操作,对cpu的影响。除此之外,通过定期删除策略、过期键定期删除策略,有效的减少了因为过期键而带来的内存浪费。

定期删除策略的难点是确定删除操作的时长和频率。如果删除操作的太频繁或者执行时长太长,定期删除策略会退化成定时删除策略,以至于cpu时间过多的消耗在删除过期键上。如果删除操作执行的太少,或者执行的时间太短,定期删除策略又会和惰性删除策略一样出现内存浪费的情况。

9.6Redis的过期键删除策略

惰性删除+定期删除

9.9重点回顾

  • 数据库的键总是一个字符串对象,而值则可以是任意一种累积对象。类型包括字符串、对象、哈希表对象、集合对象、列表对象和有序集合对象,分别对应字符串键、哈希表键、集合键、列表键和有序集合键。
  • Ready使用惰性删除和定期删除两种策略来删除过期的键。惰性删除策略只在碰到过期键时才进行删除操作,定期删除策略,则每隔一段时间主动查找并删除过期键。
  • 当一个过期键被删除之后,服务器会追加一条delete命令,到现有a of文件的末尾显示的删除过期键。
  • 重服务器,即使发现过期键也不会自作主张的删除它,而是等待主节点发来delete命令。这种统一中心化的过期键删除策略,可以保证从主从服务器数据的一致性。
  • 当radius命令对数据库进行修改之后,服务器会根据配置向客户端发送数据库通知。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值