版权声明:本文为CSDN博主「奥修诺斯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39944869/article/details/100849436

Redis中一个键过期了,什么时候会被删除呢?有以下三种策略

定时删除: 在设置键过期时间的同时,创建一个定时器,让定时器在过期时间来临时,立即执行对键的删除操作
惰性删除: 放任键过期不管,但是每次从键空间获取键时,都检查取得的键是否过期,过期的话就删除该键,没过期的话就返回该键
定期删除: 每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键,至于要删除多少个过期键,检查多少个数据库,由算法决定
定时删除
定时删除策略是内存友好的.通过定时器,定时删除策略可以保证过期键会尽可能的被删除,并释放过期键所占用的内存
缺点是对CPU时间不友好,在过期键较多的情况下,删除过期键会占用一部分CPU时间,在内存不紧张但CPU时间紧张的情况下,将CPU时间用在删除和当前任务无关的过期键上,无疑会对服务器的响应时间和吞吐量造成影响.

惰性删除
惰性删除对CPU时间是友好的,程序只有在取出键时会进行过期检查,这样可以保证删除过期键操作只会在非做不可的情况下进行,并且删除的目标仅限于当前处理的键,这个策略不会再删除其他无关的过期键上花费任何CPU时间
缺点是对内存最不友好的,如果一个键已经过期,而这个键又仍然保留在数据库中,只要这个键不被删除,他所占用的内容就不会释放.

定期删除
定期删除策略是前两种策略的整合和折中:
定期删除策略每隔一段时间执行一次删除过期键操作,并且通过限制操作执行的时长和频率来减少删除操作对CPU时间的影响.并且通过定期删除过期键,有效的减少因为过期键而带来的内存浪费
定时删除的难点是确定删除操作执行的时长和频率
如果删除操作执行的太频繁,或者执行时间太长,定期删除就会退化成定时删除,将CPU时间过多的浪费在删除过期键
如果删除操作执行的太少或者太短,又会和惰性删除一样,出现浪费内存的情况

Redis所用策略
惰性删除和定期删除相结合,但是Redis定期删除是随机抽取机制,不可能扫描删除掉所有的过期Key,因此需要内存淘汰机制.

内存淘汰机制
redis中当内存超过限制时,按照配置的策略,淘汰掉相应的key-value,使得内存可以继续留有足够的空间保存新的数据。redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。
Redis有6种策略(默认volatie-lru)

volatile-lru:使用LRU算法进行数据淘汰(淘汰上次使用时间最早的,且使用次数最少的key),只淘汰设定了有效期的key ;
allkeys-lru:使用LRU算法进行数据淘汰,所有的key都可以被淘汰;
volatile-random:随机淘汰数据,只淘汰设定了有效期的key;
allkeys-random:随机淘汰数据,所有的key都可以被淘汰;
volatile-ttl:淘汰剩余有效期最短的key;
no-enviction:不删除任意数据(但redis还会根据引用计数器进行释放),这时如果内存不够时,会直接返回错误 。
LRU数据淘汰机制
在服务器配置中保存了 lru 计数器 server.lrulock,会定时(redis 定时程序 serverCorn())更新,server.lrulock 的值是根据 server.unixtime 计算出来的。
在数据集中随机挑选几个键值对,取出其中 lru 最小的键值对淘汰。所以,你会发现,redis并不是保证取得所有数据集中最近最少使用(LRU)的键值对,而只是随机挑选的几个键值对中的。

二、TTL数据淘汰机制
从过期时间的表中随机挑选几个键值对,取出其中 ttl 最大的键值对淘汰。同样你会发现,redis并不是保证取得所有过期时间的表中最快过期的键值对,而只是随机挑选的几个键值对中的。

过期键删除策略和内存淘汰机制之间的关系:
过期健删除策略强调的是对过期健的操作,如果有健过期了,而内存还足够,不会使用内存淘汰机制,这时也会使用过期健删除策略删除过期健。
内存淘汰机制强调的是对内存的操作,如果内存不够了,即使有的健没有过期,也要删除一部分,同时也针对没有设置过期时间的健。

Redis的过期删除策略(和内存淘汰机制)-转的更多相关文章

  1. Redis 中的过期删除策略和内存淘汰机制

    Redis 中 key 的过期删除策略 前言 Redis 中 key 的过期删除策略 1.定时删除 2.惰性删除 3.定期删除 Redis 中过期删除策略 从库是否会脏读主库创建的过期键 内存淘汰机制 ...

  2. Redis详解(十一)------ 过期删除策略和内存淘汰策略

    在介绍这篇文章之前,我们先来看如下几个问题: ①.如何设置Redis键的过期时间? ②.设置完一个键的过期时间后,到了这个时间,这个键还能获取到么?假如获取不到那这个键还占据着内存吗? ③.如何设置R ...

  3. 面试官:Redis 过期删除策略和内存淘汰策略有什么区别?

    作者:小林coding 计算机八股文网站:https://xiaolincoding.com 大家好,我是小林. Redis 的「内存淘汰策略」和「过期删除策略」,很多小伙伴容易混淆,这两个机制虽然都 ...

  4. 【Redis】过期键删除策略和内存淘汰策略

    Redis 过期键策略和内存淘汰策略 目录 Redis 过期键策略和内存淘汰策略 设置Redis键过期时间 Redis过期时间的判定 过期键删除策略 定时删除 惰性删除 定期删除 Redis过期删除策 ...

  5. Redis(六)--- Redis过期策略与内存淘汰机制

    1.简述 关于Redis键的过期策略,首先要了解两种时间的区别,生存时间和过期时间: 生存时间:一段时长,如30秒.6000毫秒,设置键的生存时间就是设置这个键可以存在多长时间,命令有两个 expir ...

  6. Redis的过期策略和内存淘汰机制

    过期策略 我们set key的时候,都可以给一个expire time,就是过期时间,指定这个key比如说只能存活1个小时,我们自己可以指定缓存到期就失效. 如果假设你设置一个一批key只能存活1个小 ...

  7. redis的过期策略以及内存淘汰机制

    redis采用的是定期删除+惰性删除策略. 为什么不用定时删除策略? 定时删除,用一个定时器来负责监视key,过期则自动删除.虽然内存及时释放,但是十分消耗CPU资源.在大并发请求下,CPU要将时间应 ...

  8. redis过期策略和内存淘汰机制

    目录 常见的删除策略 redis使用的过期策略:定期删除+惰性删除 定期删除 惰性删除 为什么要采用定期删除+惰性删除2种策略呢? redis内存淘汰机制 常见的删除策略 1.定时删除:在设置键的过期 ...

  9. redis过期策略与内存淘汰机制分析

    过期策略: 我们在set key时,可以给一个expire time,就是过期时间 这段过期时间以后,redis对key删除使用:定期删除+惰性删除 定期删除指redis默认在100ms内随机抽取一些 ...

随机推荐

  1. python执行命令行调试工具pdb

    调试 pdb pdb是基于命令行的调试工具,非常类似gnu的gdb(调试c/c++). 命令 简写命令 作用 break b 设置断点(用法,b <数字>:在第数字行设置断点....... ...

  2. awk 循环过滤EPC脚本

    无处理中EPC过滤脚本 #!/bin/bash if [ "$#" -lt 3 -o "$#" -gt 4 ];then #if [ "$#" ...

  3. 分布式:分布式事务(CAP、两阶段提交、三阶段提交)

    1 关于分布式系统 1.1 介绍 我们常见的单体结构的集中式系统,一般整个项目就是一个独立的应用,所有的模块都聚合在一起.明显的弊端就是不易扩展.发布冗重.服务治理不好做. 所以我们把整个系统拆分成若 ...

  4. Flink使用IDEA进行jar打包

    pom文件增加 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>mav ...

  5. JAVA字符串去掉html代码,获取内容

    有时候我们需要在html代码中获取到文本内容,需要把html代码中的标签过滤掉 String htmlStr="html代码"; htmlStr = htmlStr.replace ...

  6. 【LeetCode】912. Sort an Array 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 库函数排序 桶排序 红黑树排序 归并排序 快速排序 ...

  7. hdu 4704 Sum(组合,费马小定理,快速幂)

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4704: 这个题很刁是不是,一点都不6,为什么数据范围要开这么大,把我吓哭了,我kao......说笑的, ...

  8. poj 2566Bound Found(前缀和,尺取法)

    http://poj.org/problem?id=2566: Bound Found Time Limit: 5000MS   Memory Limit: 65536K Total Submissi ...

  9. 1382 - The Queue

    1382 - The Queue   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB On som ...

  10. Trial-faster-rcnn

    目录 motivation 实验设置 实验结果 motivation 试一下faster rcnn的代码, 主要想看看backbone训练一部分好呢还是全部都训练好呢? 实验设置 Attribute ...