Redis(六)--- Redis过期策略与内存淘汰机制
1、简述
关于Redis键的过期策略,首先要了解两种时间的区别,生存时间和过期时间;
生存时间:一段时长,如30秒、6000毫秒,设置键的生存时间就是设置这个键可以存在多长时间,命令有两个 expire(秒)、pexpire(毫秒)(可以参考Redis(四)--- Redis命令参考)。
过期时间:一个时间点,unix时间戳,设置键的过期时间就是设置键在之后的某个时间点过期,命令两个expreat(秒时间戳)、pexpireat(毫秒时间戳)。
无论是过期时间或生存时间,在底层存储都会转换为unix时间戳,由于过期就是设置的unix时间错,所以我们通常把两种时间都叫做过期时间。
当内存使用达到Redis限制的上限时,就会触发内存淘汰机制。
2、过期策略
通过上一章(Redis(五)--- Redis的持久化RDB和AOF)第一节可以知道,Reids键的过期时间都是存在数据库结果中的过期字典中的,那么一个键过期了,什么时候回进行删除呢?有三种策略。
(1)定时删除:在设置过期时间的同时,设置一个定时器,定时器的执行时间就是过期的时间点。
- 优点:对内存最友好,过期的键会以最快的被删除,释放内存。
- 缺点:对CPU时间最不友好,在大量键设置过期时间时,会创建大量的定时器,执行浪费CPU时间。
(2)惰性删除:不管键是否过期,只有每次取值的时候,才检查是否过期,过期就删除。
- 优点:对CPU时间最友好,取值时检查,只对当前键操作,不影响其他。
- 缺点:队内存不友好,可能会存在大量过期的未被使用的键值没有删除,无用数据占用了大量内存。
(3)定期删除:每隔一段时间,程序对数据库进行一次检查,过期的就删除。
- 优点:前两种方案的折中,通过减少执行频率来减少对CPU时间的影响,通过定期删除减少了对内存的浪费。
- 缺点:执行频率需要掌握好,不然太频繁则退化成定时删除,太少则退化成惰性删除。
Redis采用的是惰性删除和定期删除两种策略。
持久化和复制对过期键的处理
(1)RDB持久化
主服务器:RDB文件无论是生成或载入,都会对过期键进行检查;生成时,过期键不写入;载入时,过期键会忽略。
从服务器:载入时,不会检查是否过期,数据都会载入。
(2)AOF持久化
AOF文件写入时,键过期未删除,不影响;键过期已删除,则在AOF文件后追加DEL命令。
(3)AOF重写
AOF重写过程中会进行检查,过且的键忽略。
(4)复制
主从模式下,由主服务器进行删除过期键,并显示的向从服务器发送DEL命令;从服务器自身不具备删除过期键值行为。
3、内存淘汰机制
当Redis的内存使用达到设置的内存上限时就会触发内存淘汰机制,按照特定的淘汰算法进行数据清理,释放内存。
具体的内存淘汰算法有一以下几种:
(1)noeviction:不淘汰,内存不足时, 新写入会报错。
(2)allkeys-lru:LRU,内存不足时,淘汰最近最少使用的key。
(3)allkeys-random:随机,内存不足时,在所有key中随机选择一个key淘汰。
(4)volatile-lru:过期时间内LRU,内存不足时,在设置了过期时间的key中,淘汰最近最少使用的key。
(5)volatile-random:过期时间内随机,内存不足时,在设置了过期时间的key中,随机选择一个key淘汰。
(6)volatile-ttl:更早过期时间,内存不足时,在设置了过期时间的key中,选择有更早过期时间的key淘汰。
Redis默认使用的是LRU算法,需要注意的是LRU并不是多有的keys进行LRU,而是在所有的key中随机选择3个key,在这3个key中进行LRU算法选择;3个这个个数可以在redis配置文件中进行配置maxmeory-samples选项。
在大规模并发的情况下,我们可以使用集群方式进行内存的扩充。
4、总结
- Redis的过期策略和内存淘汰机制是两种不同的方式,注意不要混淆
- 在内存淘汰期间并不会影响过期删除处理,过期策略主要用于处理内存中过且的数据。
参考:
《Redis设计与实现》黄健宏著,网上对Redis的详解等
此博客为笔者使用redis很久之后,参考网络上各类文章总结性书写,原创手打,如有错误欢迎指正。
Redis(六)--- Redis过期策略与内存淘汰机制的更多相关文章
- 关于redis的几件小事(四)redis的过期策略以及内存淘汰机制
1.数据为什么会过期? 首先,要明白redis是用来做数据缓存的,不是用来做数据存储的(当然也可以当数据库用),所以数据时候过期的,过期的数据就不见了,过期主要有两种情况, ①在设置缓存数据时制定了过 ...
- Redis的过期策略和内存淘汰机制
过期策略 我们set key的时候,都可以给一个expire time,就是过期时间,指定这个key比如说只能存活1个小时,我们自己可以指定缓存到期就失效. 如果假设你设置一个一批key只能存活1个小 ...
- redis的过期策略以及内存淘汰机制
redis采用的是定期删除+惰性删除策略. 为什么不用定时删除策略? 定时删除,用一个定时器来负责监视key,过期则自动删除.虽然内存及时释放,但是十分消耗CPU资源.在大并发请求下,CPU要将时间应 ...
- redis过期策略和内存淘汰机制
目录 常见的删除策略 redis使用的过期策略:定期删除+惰性删除 定期删除 惰性删除 为什么要采用定期删除+惰性删除2种策略呢? redis内存淘汰机制 常见的删除策略 1.定时删除:在设置键的过期 ...
- redis过期策略与内存淘汰机制分析
过期策略: 我们在set key时,可以给一个expire time,就是过期时间 这段过期时间以后,redis对key删除使用:定期删除+惰性删除 定期删除指redis默认在100ms内随机抽取一些 ...
- redis过期策略以及内存淘汰机制(理论+配置)
一.redis的过期策略: redis的过期策略是:定期删除+惰性删除redis在存储数据时,可能会设置过期时间,而所谓的定期删除,指的是redis默认是每隔100ms就随机抽取一些设置了过期时间的k ...
- redis过期策略、内存淘汰策略、持久化方式、主从复制
原文链接:https://blog.csdn.net/a745233700/article/details/85413179 一.Redis的过期策略以及内存淘汰策略:1.过期策略:定期删除+惰性删除 ...
- Redis的过期删除策略(和内存淘汰机制)-转
版权声明:本文为CSDN博主「奥修诺斯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/qq_39944869/ ...
- Redis 中的过期删除策略和内存淘汰机制
Redis 中 key 的过期删除策略 前言 Redis 中 key 的过期删除策略 1.定时删除 2.惰性删除 3.定期删除 Redis 中过期删除策略 从库是否会脏读主库创建的过期键 内存淘汰机制 ...
随机推荐
- Binary classification - 聊聊评价指标的那些事儿【回忆篇】
在解决分类问题的时候,可以选择的评价指标简直不要太多.但基本可以分成两2大类,我们今分别来说道说道 基于一个概率阈值判断在该阈值下预测的准确率 衡量模型整体表现(在各个阈值下)的评价指标 在说指标之前 ...
- Spark学习之路(六)—— 累加器与广播变量
一.简介 在Spark中,提供了两种类型的共享变量:累加器(accumulator)与广播变量(broadcast variable): 累加器:用来对信息进行聚合,主要用于累计计数等场景: 广播变量 ...
- idea+mvc项目转换小记
经过大家协商,决定还是紧跟时代潮流,把项目转到idea下,并且重新组织项目结构.项目环境原本为myeclipse+maven+springMVC,由于本人提议的boot+cloud变化太大,成本巨大, ...
- Java虚拟机详解(二)------运行时内存结构
首先通过一张图了解 Java程序的执行流程: 我们编写好的Java源代码程序,通过Java编译器javac编译成Java虚拟机识别的class文件(字节码文件),然后由 JVM 中的类加载器加载编译生 ...
- 解读TIME_WAIT--你在网上看到的大多数帖子可能都是错误的
由于TCP协议整个机制也非常复杂我只能尽可能的在某一条线上来说,不可能面面俱到,如果有疏漏或者对于内容有异议可以留言.谢谢大家. 查看服务器上各个状态的统计数量: netstat -ant | awk ...
- V语言横空出世,C/C++/Java/Python/Go地位不保
V语言已在github正式开源,目前已收获近9000星,引发开发者的强烈关注. V语言到底是怎样一门语言?已经有了C/C++/Java/Python/Go..., 我们还需要另外一门语言吗? 先看看V ...
- 微服务-springboot日志配置
springboot 默认会加载classpath:logback-spring.xml文件. springProfile 中的name名字对应application-xx.properties 中的 ...
- MySQL之基础操作
一.安装 Mysql是最流行的关系型数据库管理系统之一,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数 ...
- BZOJ 2039:[2009国家集训队]employ人员雇佣(最小割)
http://www.lydsy.com/JudgeOnline/problem.php?id=2039 题意:中文题意. 思路:一开始想着和之前做的最大权闭合图有点像,但是如果把边全部当成点的话,那 ...
- Codeforces 755A:PolandBall and Hypothesis(暴力)
http://codeforces.com/problemset/problem/755/A 题意:给出一个n,让你找一个m使得n*m+1不是素数. 思路:暴力枚举m判断即可. #include &l ...