zoukankan      html  css  js  c++  java
  • redis的3种过期键删除策略

    Redis的过期键的过期时间都保存在过期字典中,过期键的删除策略有三种,分别是定时删除、惰性删除和定期删除。

    定时删除

    定时删除策略,是指在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间到的时候,立即执行对键的删除操作。

    定时删除策略的优点

    对内存友好,通过定时器可以保证过期键能尽可能快地被删除,并释放过期键占用的空间。

    定时删除策略的缺点

    1.对CPU不友好。在过期键较多的情况下,删除过期键可能会占用相当一部分的CPU执行时间。在内存不紧张而CPU紧张的情况下,将CPU资源用在删除和当前任务无关的过期键上,无疑也会对服务器的响应时间和吞吐量造成影响。

    2.创建定时器需要Redis服务器中的时间事件,而现在时间事件的实现方式是无序链表,查找一个事件的事件复杂度为O(N),并不能高效地处理大量时间事件。

    惰性删除

    惰性删除策略,是指放任键过期不管,每次从键空间获取键的时候才去检查取得的键是否过期,如果过期的话,就删除该键,如果不过期,就返回该键。

    惰性删除策略的优点

    对CPU友好,程序只在取出键时才对键进行过期检查,删除的目标进行预当前处理的键。

    惰性删除策略的缺点

    惰性删除策略对内存不友好,当数据库中有大量的过期键,而这些键又没有被访问到,那么它们可能因为永远都不会被进行过期检查而被删除。

    定期删除

    定期删除策略,是指每隔一段时间,程序就会对数据库进行一次检查,删除里面的过期键。至于删除多少过期键,以及检查多少数据库,都由算法来决定。这种策略是前面两种删除策略(定时删除、惰性删除)的一种折衷,它会通过限制操作执行的时长和频率来减少删除操作对CPU执行时间的影响,而确定删除策略的时长和频率就是主要难点。

    定期删除策略的难点

    1.如果删除操作太频繁,或者执行时间过长,定期删除策略就会退化成定时删除策略。

    2.如果删除操作执行得太少,或者执行时间太短,定期删除策略又会和惰性删除策略一样,出现内存浪费的现象。

    总结

    这三种策略,第一种策略(定时删除)和第三种策略(定期删除)可以归类为主动删除策略,第二种策略(惰性删除)则是被动删除策略。Redis服务器实际使用的是惰性删除+定期删除两种策略的一个配合使用。通过这两种策略的配合使用,服务器就可以很好地在【合理使用CPU时间】和【避免浪费内存空间】之间取得平衡。

    "第一次遇见你其实没什么特别,也不会想到后来会那么喜欢你。"

  • 相关阅读:
    位运算技巧2
    如果函数的参数是一个指针,不要指望用该指针去申请动态内存
    位运算 技巧1
    野指针?空指针?
    面试题:位操作实现四则运算
    面试题:递归颠倒栈 与栈排序
    求一个数任意位的值及位数
    基数排序
    面试题:最长回文子串(即求对称字符串的最大长度 )
    数据结构之后缀数组suffix array
  • 原文地址:https://www.cnblogs.com/yanggb/p/11111656.html
Copyright © 2011-2022 走看看