• redis如何清理过期数据+++redis缓存满了的策略


    1.redis如何清理过期数据

    redis出于性能上的考虑,无法做到对每一个过期的key进行即时的过期监听和删除。但是redis提供了其它的方法来清理过期的key。

    1.被动清理

    当用户主动访问一个过期的key时,redis会将其直接从内存中删除。

    2.主动清理

        在redis的持久化中,我们知道redis为了保持系统的稳定性,健壮性,会周期性的执行一个函数。在这个过程中,会进行之前已经提到过的自动的持久化操作,同时也会进行内存的主动清理。
        在内存主动清理的过程中,redis采用了一个随机算法来进行这个过程:简单来说,redis会随机的抽取N(默认100)个被设置了过期时间的key,检查这其中已经过期的key,将其清楚。同时,如果其中已经过期的key超过了一定的百分比M(默认是25),则将继续执行一次主动清理,直至过期key的百分比在概率上降低到M一下。

    3.内存不足时触发主动清理

    在redis的内存不足时,也会触发主动清理。

    2.redis缓存满了怎么处理

    redis允许用户通过配置maxmemory-policy参数,指定redis在内存不足时的解决策略。

      1.volatile-lru 使用LRU算法删除一个键(只针对设置了过期时间的key
      2.allkeys-lru 使用LRU算法删除一个键
      3.volatile-lfu 使用LFU算法删除一个键(只针对设置了过期时间的键)
      4.allkeys-lfu 使用LFU算法删除一个键
      5.volatile-random 随机删除一个键(只针对设置了过期时间的键)
      6.allkeys-random 随机删除一个键
      7.volatile-ttl 删除最早过期的一个键
      8.noeviction 不删除键,返回错误信息(redis默认选项)

    对于只针对设置了过期时间的键进行删除的策略,在所有的可被删除的键(非永久的键)都被删除时内存依然不足,将会抛出错误。
    其中,LRU算法—>最近最少使用算法,较为注重于时间;LFU算法—>最近最不常用算法,较为注重于被访问频率。redis的内存置换算法和操作系统中的内存置换算法类似,就不在这里展开了。

  • 相关阅读:
    C#中两个日期类型的变量如何进行比较
    Ajax基本原理讲解 (引用别人文章)
    Ajax程序设计入门
    ASP.NET中如何调用存储过程
    删除SAM文件真的能够消除XP系统管理员的密码吗?
    用XMLHttpRequest和struts实现AJAX(译)
    关于邮件系统域名(DNS)设置的小常识
    输出各种二进制流的格式
    WPF 3D编程介绍
    WPF 3D学习笔记
  • 原文地址:https://www.cnblogs.com/linhongwenBlog/p/14578494.html
Copyright © 2020-2023  润新知