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,也应当进行删除,否则会浪费内存 ...
随机推荐
- [Mini Programe] Upload Images
Code for upload iamges: chooseImage: choose the images to upload previewImage: preview the image and ...
- VS2012调试执行,网页打不开
360修复漏洞篇 TODO 修复了漏洞.vs2012在firefox和ie中都打不开 解决思路:360漏洞修复→已安装漏洞→卸载刚刚安装的漏洞 就可以解决 忽略漏洞 正常打开.
- 数据库学习之简单的SQL语句
1.数据库的结构 1.1数据库 不同数据库叫做Catalog(在有的 DBMS 中也称为 Database,即数据库) .採用多 Catalog 以后能够给我们带 来例如以下优点: 便于对各个 Cat ...
- SOJ.Output the Yanghui triangel
Output the Yanghui triangel 总提交数量: 225 通过数量: 59 时间限制:1秒 内存限制:256兆 题目描写叙述 Writ ...
- Java程序执行超时——Future接口介绍
在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API的一部分,在java.uti ...
- yum install -y dos2unix
yum install -y dos2unix linux 怎么把^M去掉 - CSDN博客 http://blog.csdn.net/humanof/article/details/53044217 ...
- .NET连接数据库实例
.NET连接数据库实例 keleyi.com 柯乐义 本实例实现了从MSSQL 2005数据库读取数据并显示在页面上的功能.在Visual Studio 2010上测试成功.源代码下载:http:// ...
- 57.部门职位管理 ExtJs 展示
1.jobInfo.jsp <%@ page language="java" pageEncoding="UTF-8"%> <script t ...
- setings.py配置文件详解
BASE_DIR指的是项目的根目录.SECRET_KEY是安全码. # SECURITY WARNING: don't run with debug turned on in production! ...
- PCB Genesis脚本 C#调用Javascript
曾经用node.js测试写Genesis脚本失败了,这次借助开发PCB规则引擎的机会(基于JS V8引擎与.net深度交互性), 验证一下Javascript是否可用于写Genesis脚本. 一.测试 ...