• 十四、Redis的缓存过期淘汰策略


    一、默认内存大小

    默认在64位操作系统下是不限制内存大小的,在32位操作系统下是3G。

    二、推荐设置内存的大小

    推荐为最大物理内存的75%。(关键字:HashMap的负载因子默认为0.75

    三、三种过期key的删除策略 

    当一个key过期了,并不是立即从Redis中删除。而是以下三种方式:

    1、立即删除

    优点

    • 能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放

    缺点

    • 对cpu是最不友好的。因为实时删除操作会占用cpu的时间

    总结

    • 对CPU不友好,用处理器性能换取存储空间 (拿时间换空间)

    2、惰性删除

    key到达过期时间时,不做处理。等到下次访问时判断,如果过期则删除key,未过期则返回数据。

    优点

    • 节省处理器性能

    缺点

    • 占用空间大
    • 如果redis中存在大量不再使用的过期key,则一直无法删除,除非手动FLUSHDB。

    总结

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

    3、定期删除

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

    周期性的轮询Redis库中的时效性数据,采取随机抽取的策略,利用过期数据占比的方式控制删除额度

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

    总结

    • 周期性抽查存储空间 (随机抽查,重点抽查)

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

    四、八种内存淘汰策略

    1、八种策略

    noeviction: 不会驱逐任何key,即当内存超出限制后,报错返回OOM,但不驱逐任何key(出厂默认配置)

    allkeys-lru: 对所有key使用LRU算法进行删除(推荐)

    volatile-lru: 对所有设置了过期时间的key使用LRU算法进行删除

    allkeys-random: 对所有key随机删除

    volatile-random: 对所有设置了过期时间的key随机删除

    volatile-ttl: 删除马上要过期的key

    allkeys-lfu: 对所有key使用LFU算法进行删除

    volatile-lfu: 对所有设置了过期时间的key使用LFU算法进行删除

    LRU:Least Recently Used 最近最少使用。

    LFU:Least Frequently Used 最不常使用。

    2、总结

    2 * 4 = 8

    2是指2个维度

    • 过期键中筛选
    • 所有键中筛选

    4是指4个方面

    • LRU
    • LFU
    • random:随机
    • ttl:过期时间

     3、配置

  • 相关阅读:
    Asp.net中利用ExecuteNonQuery()执行存储过程返回1解决方案
    在workflow中,无法为实例 ID“...”传递接口类型“...”上的事件“...” 问题的解决方法。
    jquery获取一个table中的一行的每个td的内容
    自动ping博客服务程序
    总结JavaScript(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作
    sql server try...catch使用
    IAsyncResult异步设计
    jquery 判断一个对象是否存在
    数据库表扩展字段设计思路
    REST接口POST方法发送文件到服务器(C#)
  • 原文地址:https://www.cnblogs.com/shiblog/p/15698764.html
Copyright © 2020-2023  润新知