zoukankan      html  css  js  c++  java
  • Redis 过期策略+内存淘汰机制

    关于过期有一个标识过期时间的,针对String类型的,有 setex(String key, int seconds, String value)--字符串独有的方式这个命令,其他的数据类型,则有expire key time(以秒为单位) 这个命令去设置过期时间。

    redis 的过期策略有一下几种{这些知识网上一查一大堆,都整理的很好,但是自己整理一遍,记忆理解都会加深很多}

    过期策略:

      • 定时删除
        在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除。
        优点:这样做内存就能尽快被释放掉,
        缺点:每一个key 创建一个定时器,大量的定时器会被创建。
      • 惰性删除
        • 含义:key过期的时候不删除,每次从数据库获取key的时候去检查是否过期,若过期,则删除,返回null。
        • 优点:删除操作只发生在从数据库取出key的时候发生,而且只删除当前key,所以对CPU时间的占用是比较少的,而且此时的删除是已经到了非做不可的地步(如果此时还不删除的话,我们就会获取到了已经过期的key了)
        • 缺点:若大量的key在超出超时时间后,很久一段时间内,都没有被获取过,那么可能发生内存泄露(无用的垃圾占用了大量的内存)

                定期删除

              每隔一段时间执行一次删除过期key操作
        优点:
        • 通过限制删除操作的时长和频率,来减少删除操作对CPU时间的占用--处理"定时删除"的缺点
        • 定期删除过期key--处理"惰性删除"的缺点
        缺点:定时删除和惰性删除的优点被弱化了
      redis 是惰性删除和定期删除结合使用的。

    内存淘汰策略:

    最大内存设置:maxmemory   ,redis 一共有六种淘汰策略,默认是volatile-lru

    • volatile-lru:使用LRU算法进行数据淘汰(淘汰上次使用时间最早的,且使用次数最少的key),只淘汰设定了有效期的key ;
    • allkeys-lru:使用LRU算法进行数据淘汰,所有的key都可以被淘汰;
    • volatile-random:随机淘汰数据,只淘汰设定了有效期的key;
    • allkeys-random:随机淘汰数据,所有的key都可以被淘汰;
    • volatile-ttl:淘汰剩余有效期最短的key;
    • no-enviction:不删除任意数据(但redis还会根据引用计数器进行释放),这时如果内存不够时,会直接返回错误 。
  • 相关阅读:
    数组(2)
    数组(1)
    【探路者】第二周立会报告5(总第11次)
    【探路者】第二周立会报告4(总第10次)
    【探路者】第二周立会报告3(总第9次)
    【探路者】第二周立会报告2(总第8次)
    【探路者】第二周立会报告(总第7次)
    第五周作业1
    【探路者】10月19日立会报告(总第6次)
    【探路者】10月18日立会报告(团队第1周-第5次)
  • 原文地址:https://www.cnblogs.com/junbaba/p/12910699.html
Copyright © 2011-2022 走看看