• redis三大删除策略以及redis八种淘汰策略


    三大删除策略

    redis在删除过期key的时候,不可能时时刻刻都遍历所有被设置过期时间的key来检测数据是否已经达到过期时间,然后再对它进行删除。所以有三种删除的方式

    1. 立刻删除
    2. 惰性删除
    3. 定期删除

    一、立刻删除

    立刻删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放。但是立刻删除对cpu是最不友好的。因为删除操作会占用cpu的时间,如果刚好碰到了cpu很忙的时候,比如正在做交集或者排序等计算,那么就会给cpu造成额外压力,让cpu忙死。这会产生大量的性能消耗,同时也会影响数据的读取操作。

    总结:对cpu不友好,用处理器性能换取存储空间(拿时间换空间)

    二、惰性删除

    数据到达过期时间,不做处理。等下次访问该数据的时候判断,是否过期,假如没过期则返回;假如已过期,删除返回不存在。惰性删除的缺点是对内存不友好。

    总结:对内存不友好,用存储空间换取处理器性能(拿空间换时间)

    三、定期删除

    定期删除策略是前两种策略的折中。

    定期删除策略每隔一段时间执行一次删除过期键操作,并通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响。

    周期性轮询redis库中的时效性数据,采用随机抽取的策略,利用过期数据占比的方式控制删除频度。有两个特点:

    1. cpu性能占用设置有峰值,检测频度可自定义设置。
    2. 内存压力不是很大,长期占用内存的冷数据会被持续清理。

    总结:周期性抽查存储空间(随机抽查,重点抽查),有漏网之鱼

    举例:

    redis默认每100ms检查是否有过期的key,有过期key则删除。注意:redis不是每隔100ms将所有的key检查一次,而是随机抽取进行检查(如果每隔100ms全部检查,redis直接进去icu)。因此如果只采用定期删除策略,会导致很多key到时见没有删除。

    定期策略的难点是不确定删除操作执行的时长和频率:如果删除操作执行的太频繁或者执行的时间太长,定期删除策略就会退化成立即删除策略,以至于将CPU时间过去的消耗在删除过期键上面。如果删除操作执行的太少或者执行的时间太短,定期删除策略又会和惰性删除策略一样,出现浪费内存的情况。因此,如果采用定期删除策略的话,服务器必须根据情况,合理地设置删除操作的执行时长和执行频率。

    八种淘汰策略

    两幅图片,都看看,深入理解一下 

     

    一、策略
    ttl:设置了过期时间的key中,剩余时间更少的优先淘汰。
    lru:最近最少使用的key,优先被淘汰。
    lfu:最近访问频率最少的key,优先被淘汰。
    random:随机淘汰内存中内容。
    noeviction:无法再写入Redis,不会处理内存中的内容,是默认的淘汰策略。
    二、范围
    allkeys-xxx:allkeys开头的是对Redis中的所有key都在淘汰范围内。
    volatile-xxx:volatile开头的是对Redis中的设置了超时时间的key列入淘汰范围。
    三、设置淘汰策略
    Redis的配置文件中maxmemory-policy,就是我们说的,达到最大内存后的淘汰策略。
    所以以上的淘汰策略+淘汰范围结合起来,Redis中有以下几类淘汰策略,可以进行设置

    最好使用allkeys-lru

  • 相关阅读:
    Jmeter(二十七) 从入门到精通 Jmeter Http协议录制脚本(详解教程)
    Jmeter(二十六) 从入门到精通 搭建开源论坛JForum(详解教程)
    [Erlang0003][OTP] Efficiency Guide User's Guide > Common Caveats
    [Erlang0008][OTP] 高效指南 表和数据库(ets mnesia)
    [Erlang0004][OTP] 高效指南 二进制的构造和匹配(1)
    [Erlang0002][OTP] Efficiency Guide User's Guide > The Eight Myths of Erlang Performance
    [Erlang0010][News]OTP 技术委员会 影响R16的决策 (OTP Technical Board Decisions affecting R16 翻译)
    [Erlang0007][OTP] 高效指南 函数
    [Erlang0005][OTP] 高效指南 二进制的构造和匹配(2)
    [Erlang0001][OTP] Efficiency Guide User's Guide>Introduction
  • 原文地址:https://www.cnblogs.com/wt645631686/p/9726441.html
Copyright © 2020-2023  润新知