• Redis内存淘汰机制


    Redis内存淘汰机制

    引言

    Redis 启动会加载一个配置:

    maxmemory   //内存上限

    默认值为 0 (window版的限制为100M),表示默认设置Redis内存上限。但是真实开发还是需要提前评估key的体量,提前设置好内容上限。

    此时思考一个问题,开发中,在设置完内存上限之后,如果Redis key达到上限了,该怎么办?这就设置到Redis的内存淘汰机制了。

    内存淘汰算法

    Redis内存淘汰机制也可以称之为key内卷机制,当资源不足时,该如何选择?

    常见的内存淘汰机制分为四大类:

    • LRU:LRU是Least recently used,最近最少使用的意思,简单的理解就是从数据库中删除最近最少访问的数据,该算法认为,你长期不用的数据,那么被再次访问的概率也就很小了,淘汰的数据为最长时间没有被使用,仅与时间相关。

    • LFU:LFU是Least Frequently Used,最不经常使用的意思,简单的理解就是淘汰一段时间内,使用次数最少的数据,这个与频次和时间相关。

    • TTL:Redis中,有的数据是设置了过期时间的,而设置了过期时间的这部分数据,就是该算法要解决的对象。如果你快过期了,不好意思,我内存现在不够了,反正你也要退休了,提前送你一程,把你干掉吧。

    • 随机淘汰:生死有命,富贵在天,是否被干掉,全凭天意了。

    Redis淘汰策略

    Redis 通过配置

    maxmemroy-policy  

    来配置指定具体的淘汰机制,可供选择的值有:

     通过maxmemroy-policy可以配置具体的淘汰机制,看了网上很多文章说只有6种,其实有8种,可以看Redis5.0的配置文件,上面有说明:

    • volatile-lru -> 找出已经设置过期时间的数据集,将最近最少使用(被访问到)的数据干掉。

    • volatile-ttl -> 找出已经设置过期时间的数据集,将即将过期的数据干掉。

    • volatile-random -> 找出已经设置过期时间的数据集,进行无差别攻击,随机干掉数据。

    • volatile-lfu -> 找出已经设置过期时间的数据集,将一段时间内,使用次数最少的数据干掉。

    • allkeys-lru ->与第1个差不多,数据集从设置过期时间数据变为全体数据。

    • allkeys-lfu -> 与第4个差不多,数据集从设置过期时间数据变为全体数据。

    • allkeys-random -> 与第3个差不多,数据集从设置过期时间数据变为全体数据。

    • no-enviction -> 什么都不干,报错,告诉你内存不足,这样的好处是可以保证数据不丢失

    系统默认选择: noenviction

    过期Key处理[拓展]

    接下讨论一个问题:Redis的key过期了,该如何清理问题。

    Redis给出3种实现方案:

    惰性删除:当访问Key时,才去判断它是否过期,如果过期,直接干掉。这种方式对CPU很友好,但是一个key如果长期不用,一直存在内存里,会造成内存浪费。

    定时删除:设置键的过期时间的同时,创建一个定时器,当到达过期时间点,立即执行对Key的删除操作,这种方式对CPU不友好,得额外让出CPU维护定时器。

    定期删除:隔一段时间,对数据进行一次检查,删除里面的过期Key,至于要删除多少过期Key,检查多少数据,则由算法决定。

    Redis服务器实际使用的是惰性删除和定期删除两种策略:通过配合使用这两种删除策略,可以很好地在合理使用CPU和避免浪费内存之间取得平衡。

  • 相关阅读:
    2022年大一网页期末作业(纯HTML+CSS实现)
    【gtp&JavaScript】使用JavaScript实现套壳gtp与gtp打字输出效果
    SoftMax回归
    中国信通院《数据安全产品与服务图谱》,美创科技实现四大板块全覆盖
    【Edibat 算法 ★★★★★★】【吸血鬼数字】Vampire Numbers
    AQS源码剖析第一篇---全貌概览
    论文阅读之Reasoning Implicit Sentiment with Chain-of-Thought Prompting
    HTTP 415错误状态码
    软件项目验收测试需提供哪些资料?找软件测试外包公司的好处?
    MySQL8.0爬坑二三事
  • 原文地址:https://blog.csdn.net/QRLYLETITBE/article/details/134440665