zoukankan      html  css  js  c++  java
  • 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的内存置换算法和操作系统中的内存置换算法类似,就不在这里展开了。

  • 相关阅读:
    文件参数Python读取wav格式文件
    电子工程术语和定义列表,按字母顺序排列
    MAC地址加减1算法
    uboot通过kernel command line 动态分区 CONFIG_MTD_CMDLINE_PARTS
    c调用shell脚本
    busybox提示can't access tty.job control turned off
    cut命令如何截取以空格隔开的字段
    DS28E01100
    busybox 中的ntpd使用
    Debugfs
  • 原文地址:https://www.cnblogs.com/linhongwenBlog/p/14578494.html
Copyright © 2011-2022 走看看