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,也应当进行删除,否则会浪费内存 ...
随机推荐
- PLY格式文件具体解释
链接:http://blog.csdn.net/szchtx/article/details/7587999 http://cdu.net.cn/3D/2014-04-23/705.html 一.PL ...
- String的'+'的性能及原理
逛了几个论坛. 不少人在讨论String的"+",StringBuilder与StringBuffer等一系列的问题.先不多说了了 现分类详述: 1.String的'+',底层运行 ...
- C 基础 全局变量
/** 被static修饰的局部变量 1.只有一份内存, 只会初始化一次 2.生命周期会持续到程序结束 3.static改变了局部变量的生命周期, 但是不能改变局部变量的作用域 被static修饰的全 ...
- ios oc 代码 转换为 c++ 描述代码编译过程
clang -rewrite-objc main.m #import <Foundation/Foundation.h> #import <objc/runtime.h> // ...
- Shiro学习(22)集成验证码
在做用户登录功能时,非常多时候都须要验证码支持,验证码的目的是为了防止机器人模拟真有用户登录而恶意訪问,如暴力破解用户password/恶意评论等. 眼下也有一些验证码比較简单,通过一些OCR工具就能 ...
- LeetCode 941. Valid Mountain Array (有效的山脉数组)
题目标签:Array 题目给了一组int array A,让我们判断它是否是 一个山脉数组. 山脉数组一定要有一个最高值,然后要同时有 山坡和下坡. 想法是,从左边开始依次比较两个数字,int[0] ...
- Ubuntu 13.10 安装 TeX Live 2013
注:笔者也是刚刚接触TeX系统,水平有限,若有疏漏之处还望指正. 中文解决方案 对于LaTeX中文排版,比较方便有这样的几种解决方案:LaTeX+CJK / LaTeX+XeTeX / CTeX.其中 ...
- 如何利用UDP协议封装一个数据包
在如何封装一个数据包上,是一个非常细致的问题,而利用UDP协议来封装的话,是比较简单,让我们一步步来分析典型的TCP/IP协议.一般来说一个典型的一个数据包,包括以太网MAC头+网络层IP数据头+传输 ...
- 一个尖括号能干什么,画一个笑脸开始(为了支持交互,它又增添了JavaScript。HTML页面也越来越臃肿。于是CSS便诞生了。API和核心代码的出现使HTML能够访问更复杂的软件功能--支持更高级的交互和云服务集成。这就是今天的HTML5)
一个尖括号 < 一个尖括号能干什么 < ? 你可以编出一顶帽子 <(:-p 或一张笑脸 :-> 再或者更直接一些 20世纪90年代初,html作为一种简单标记语言面世,用于在互 ...
- 第一篇 Windows 8 开发Windows Metro style app环境配置
半 饱问 题 到 我 这 里 为 止! 第一篇 Windows 8 开发Windows Metro style app环境配置 2012-09-24 08:24 by 半饱, 1289 阅读, 3 ...