zoukankan      html  css  js  c++  java
  • redis键的过期和内存淘汰策略

    键的过期时间

    设置过期时间

    Redis可以为存储在数据库中的值设置过期时间,作为一个缓存数据库,这个特性是很有帮助的。我们项目中的token或其他登录信息,尤其是短信验证码都是有时间限制的。

    按照传统的方法都是项目本身判断过期,这样无疑影响了系统性能。

    redis可以为set或者expire两种方式为键设置过期时间

     1         Jedis jedis = new Jedis("localhost");
     2         //nxxx:nx是不存在是才set,xx是存在时才set
     3         //expx:EX是秒,PX是毫秒
     4         jedis.set("key","value","XX","PX",1000);
     5         Thread.sleep(2000);
     6         String value = jedis.get("key");
     7         if(value==null||"".equals(value)){
     8             System.out.println("已过期");
     9         }else{
    10             System.out.println(value);
    11         }
    12         jedis.set("key","value");
    13         jedis.expire("key",10000);
    14         value = jedis.get("key");
    15         if(value==null||"".equals(value)){
    16             System.out.println("已过期");
    17         }else{
    18             System.out.println(value);
    19         }

    输出结果

    删除过期键

    为一个键设置了过期时间为一个小时,那么一个小时之后如何处理这个键呢?有两种方式:定期删除和惰性删除

    定期删除:每隔一定的时间就在设置了过期时间的键里面随机挑选一些删除

    惰性删除:已经过期了的键值没有在定期删除里被删掉,除非系统用get去查那个key才会被删除

    由此我们可以看到如果定期删除留下了很多过期的key,又没有及时去查让惰性删除发挥作用,就会在redis内存中占用大量空间,导致redis内存块被耗尽。

    为了解决这个问题,redis提供了内存淘汰策略

    内存淘汰策略

    redis提供了6种内存淘汰策略

    1、voilate-lru:在设置了过期时间的数据里面挑选最近最少被使用的删除

    2、voilate-ttl:在设置了过期时间的数据里面挑选将要过期的删除

    3、voilate-random:在设置了过期时间的数据里面随机挑选一些删除

    4、allkeys-lru:在所有数据里面挑选最近最少被使用的删除

    5、allkeys-random:在所有数据里面随机挑选一些删除

    6、no-eviction:禁止驱逐数据,不允许新数据插入

    4.0版本之后增加了两种

    7、violate-lfu:在设置了过期时间的数据里面挑选最不常使用的删除

    8、allkeys-lfu:在所有数据里面挑选最不常使用的删除

  • 相关阅读:
    第二次上机
    第二次作业
    第一次上机
    第一次作业
    第3次上机作业
    第四周作业
    第二次上机作业(第四周)
    第三周作业
    第一次上机作业
    第一次JAVA作业
  • 原文地址:https://www.cnblogs.com/huanglf714/p/11083471.html
Copyright © 2011-2022 走看看