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

    redis 的过期键的过期时间都保存在过期字典中,过期键的删除策略有3种

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

    1 定时删除特点

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

    缺点:1)cpu不友好,在过期键比较多的情况下,删除过期键可能会占用相当一部分cpu时间;在内存不紧张cpu紧张的情况下,将cpu时间用在删除和当前任务无关的过期键上,无疑会对服务器响应时间和吞吐量造成影响。2)创建定时器需要Redis服务器中的时间事件,而现在时间事件的实现方式是无序链表,查找一个事件的时间复杂度为O(N),并不能高效的处理大量时间事件。

    2 惰性删除特点

    优点:1)对cpu友好,程序只在取出键时才对建进行过期检查,删除的目标仅限于当前处理的键。

    缺点:1)对内存不友好,当数据库中有大量的过期键,而这些键又没有被访问到,那么他们也许会永远不会被删除。

    3 定期删除:是前两种删除策略的一种折中。会每隔一段时间执行一次删除过期键操作,并通过限制操作执行的时长和频率来减少删除操作对cpu时间的影响。

    难点:确定删除策略的时长和频率

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

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

  • 相关阅读:
    NLog 在NetCore中实现多实例注入DI, 实现多租户模式
    Linux命令入门篇(二)
    Linux命令入门篇(一)
    uni-app初探之幸运轮盘
    uni-app初探之天气预报小例子
    iOS 底层原理之—dyld 与 objc 的关联
    QT OpenGLWidget高分屏适配时出现的问题
    基于React.js网页版弹窗|react pc端自定义对话框组件RLayer
    面向对象的六大原则
    android混淆日记
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/10136802.html
Copyright © 2011-2022 走看看