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 中过期删除策略 从库是否会脏读主库创建的过期键 内存淘汰机制 ...
随机推荐
- 数据管理工具Flux、Redux、Vuex的区别
目录 为什么要进行数据管理? 怎么有效地进行数据管理? 数据管理工具 1. Flux 2. Redux 3. Vuex 使用数据管理工具的场景 相关资料 主要讲解一下前端为什么需要进行数据管理,有效的 ...
- Spring Boot 集成配置 HTTPS
这是泥瓦匠的第108篇原创 文章工程: * JDK 1.8 * Maven 3.5.2 * Spring Boot 1.5.9.RELEASE ## 一.HTTPS 是什么 问:什么是HTTP? 答: ...
- java源码解析之String类(五)
/* * 切片函数,非常重要,这里一定要牢记beginIndex是开始位置,endIndex是结束位置,区别于以前学的offset是开始位置,而count或length是个数和长度 * 比如说,new ...
- git的基本指令
更多详情请看廖雪峰官方网站 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 1.删 ...
- yii框架widget和注册asset的例子
yii框架是一个基于组件的框架,这样代码的重用性就非常的高,如我们想在网站的多个地方调用编辑器,这样我们就可以自定义一个组件,来供我们调用使用 下面以Ueditor组件为例: 1.下载ueditor到 ...
- 关于起点中文网的一个我自认为是BUG的BUG(花了我一毛三分钱才实验出来的)
因为最近在学关于网页的东西,所以便有了每看一个网页,总得先看看这个网页的源码的习惯. 突然我就想到了,起点中文网在看小说的界面是不允许复制粘贴,甚至连点右键都不会有反应, 那么如果我查看源码,能否复制 ...
- 【Linux】一步一步学Linux——VMware Workstation 15 Pro安装图解教程(06)
目录 00. 目录 01. VMware Workstation Pro15下载 02. VMware Workstation Pro15安装 03. VMware Workstation Pro 1 ...
- 破坏之王-DDoS攻击与防范深度剖析
破坏之王-DDoS攻击与防范深度剖析 下载:链接:https://pan.baidu.com/s/1bzVT6YkZGGg7anpQWDknjA 提取码:j7ns 网际空间的发展带来了机遇,也带来了威 ...
- EXPLAIN说明
列名 类型 解释 id SELECT语句的ID编号,优先执行编号较大的查询,如果编号相同,则从上向下执行 select_type SIMPLE 一条没有UNION或子查询部分的SELECT语句 P ...
- 两个域名同时访问一个tomcat下的两个项目
两个域名,分别映射一个TOMCAT底下,两个应用. 分三个步骤完成. 1.域名与IP的解析,此步骤在万网等机构完成. 2.APACHE的httpd.conf的配置 <VirtualHost *: ...