redis键的过期和内存淘汰策略
键的过期时间
设置过期时间
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 过期删除策略和内存淘汰策略有什么区别?
作者:小林coding 计算机八股文网站:https://xiaolincoding.com 大家好,我是小林. Redis 的「内存淘汰策略」和「过期删除策略」,很多小伙伴容易混淆,这两个机制虽然都 ...
- 【Redis】过期键删除策略和内存淘汰策略
Redis 过期键策略和内存淘汰策略 目录 Redis 过期键策略和内存淘汰策略 设置Redis键过期时间 Redis过期时间的判定 过期键删除策略 定时删除 惰性删除 定期删除 Redis过期删除策 ...
- Redis的过期策略和内存淘汰策略(转)
Redis的过期策略 我们都知道,Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间.Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理. ...
- Redis的过期策略和内存淘汰策略
Redis的过期策略:通常有三种,Redis中同时使用惰性过期和定期过期两种过期策略组合. 定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除.该策略可以立即清除过期的数据 ...
- Redis 键的过期删除策略及缓存淘汰策略
前言 Redis缓存淘汰策略与Redis键的过期删除策略并不完全相同,前者是在Redis内存使用超过一定值的时候(一般这个值可以配置)使用的淘汰策略:而后者是通过定期删除+惰性删除两者结合的方式进行内 ...
- redis过期策略、内存淘汰策略、持久化方式、主从复制
原文链接:https://blog.csdn.net/a745233700/article/details/85413179 一.Redis的过期策略以及内存淘汰策略:1.过期策略:定期删除+惰性删除 ...
- Redis详解(十一)------ 过期删除策略和内存淘汰策略
在介绍这篇文章之前,我们先来看如下几个问题: ①.如何设置Redis键的过期时间? ②.设置完一个键的过期时间后,到了这个时间,这个键还能获取到么?假如获取不到那这个键还占据着内存吗? ③.如何设置R ...
- Redis数据结构和使用场景,redis内存淘汰策略
什么样的数据适合放入Redis? sql执行耗时特别久,且结果不频繁变动的数据,适合放入Redis. Redis是单线程的,为什么会这么快? 纯内存操作 单线程操作,避免频繁的上下文切换 采用了非阻塞 ...
- Redis系列之----Redis的过期设置及淘汰策略
Redis的过期时间机制和内存淘汰策略 Redis的数据是存储在内存中的,而服务器的内存大小是有限制的,除非宕机,否则这些数据会一直存在,对于一些不再使用的key,也应当进行删除,否则会浪费内存 ...
随机推荐
- iOS----四方块 动画button实现
突然想起来上一次面试考官提问的一个问题:怎样创建一个菱形,并让它对应单击事件.能够开合的效果. 当时第一反应使用button来填充菱形的图片来实现,只是考官说,这样点击的区域不够灵敏,毕竟button ...
- 万维网 WWW (World Wide Web)
万维网 WWW (World Wide Web)并非某种特殊的计算机网络.万维网是一个大规模的.联机式的信息储藏所.万维网用链接的方法能非常方便地从因特网上的一个站点访问另一个站点,从而主动地按需获取 ...
- 【转】Intent传递数据时,可以传递哪些类型数据?
在Android应用的开发中,如果我们需要在不同的模块(比如不同的Activity之间)之间传递数据,通常有以下两种方法:1. 利用Intent对象携带数据通过查询Intent/Bundle的API文 ...
- LCA__st算法&&树上倍增
st表 #include<cstdio> #include<algorithm> #include<cmath> using namespace std; ]; ] ...
- springMVC与freemarker整合
准备好的环境:Maven工程整合好了ssm,即spring+springMVC+mybatis.接下来准备将springMVC与freemarker整合,以html文件为模板. 一,加入freemar ...
- Rails mysql数据库连接的小坑
基本上直接clone下来的话,数据库连接必失败. 注意,把用户名密码写在.env文件下
- hcode视频教程中心(学习h5和hbuilder等)
网站: http://www.hcoder.net/course
- 324 Wiggle Sort II 摆动排序 II
给定一个无序的数组nums,将它重新排列成nums[0] < nums[1] > nums[2] < nums[3]...的顺序.例子:(1) 给定nums = [1, 5, 1, ...
- C# 将结构体转为字节流的方式
1. 将基础类型转为byte数组存储 private byte[] CreateNetDataByteStream(ushort system, ushort host, ushort type, b ...
- 慕课网中网页定位导航中js相关问题总结
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...