redis键的过期和内存淘汰策略

2023-03-10,,

键的过期时间

设置过期时间

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

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

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

         Jedis jedis = new Jedis("localhost");
//nxxx:nx是不存在是才set,xx是存在时才set
//expx:EX是秒,PX是毫秒
jedis.set("key","value","XX","PX",1000);
Thread.sleep(2000);
String value = jedis.get("key");
if(value==null||"".equals(value)){
System.out.println("已过期");
}else{
System.out.println(value);
}
jedis.set("key","value");
jedis.expire("key",10000);
value = jedis.get("key");
if(value==null||"".equals(value)){
System.out.println("已过期");
}else{
System.out.println(value);
}

输出结果

删除过期键

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

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

惰性删除:已经过期了的键值没有在定期删除里被删掉,除非系统用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:在所有数据里面挑选最不常使用的删除

redis键的过期和内存淘汰策略的相关教程结束。

《redis键的过期和内存淘汰策略.doc》

下载本文的Word格式文档,以方便收藏与打印。