一文了解:Redis过期键删除策略
Redis过期键删除策略
Redis中所有的键都可以设置过期策略,就像是所有的键都可以上"生死簿",上了生死簿的键到时间后阎王就会叉掉这个键。同一时间大量的键过期,阎王就会忙不过来。同时因为Redis是单线程的,导致阎王的处理时间会变得很长,而且处理繁忙,Redis就会出现卡顿现象。
Redis有三种策略删除过期Key
相关命令
expire key seconds # 过期时间为秒数,key不存在时返回(integer) 0,key存在的时返回(integer) 1
pexpire key milliseconds # 同expire,设置的过期时间为毫秒数
setex key seconds value # 只能设置字符串的过期时间
ttl key # 查看Key的过期时间(秒数),用不过期返回(integer) -1,Key不存在返回(integer) -2
pttl key # 同ttl,返回毫秒数
过期Key
Redis的每个设置了过期时间的Key都会放在一个独立的字典中,用于遍历删除。
过期策略
被动删除
Key在被操作时,Redis主动检查Key是否过期,过期则删除,返回nil
- 对CPU友好,只有Key在被操作时删除,不会浪费CPU时间
- 对内存不友好,如果同时有大量的Key过期,这些Key在被使用之前不会被删除,就会浪费内存
主动删除
Redis会周期性的随机扫描一批设置了过期时间的Key并进行处理,Redis每秒进行10次过期扫描会做的操作有:
- 随机扫描100个设置了过期时间的Key
- 删除所有发现的过期Key
- 如果删除的Key超过1/4则重复步骤1
hz 10
Redis除了设置每秒10次的扫描频率之外,还设置了每次扫描不会超过25ms的上限,以防出现过度循环扫描,导致线程卡死。
maxmemory
# maxmemory <bytes>
当已用的内存超过maxmemory 配置的内存时,会触发主动清除策略
# maxmemory-policy noeviction
- noeviction 永不过期策略,当已用内存超过maxmemory配置时,写操作将返回错误,读操作和del操作可以继续服务。
- volatile-lru 只删除设置了过期时间的Key,使用频率越少的Key优先删除,不会对没有设置过期时间的Key删除
- volatile-ttl 和上面一样,只删除设置过期时间的Key,TTL过期时间越少优先删除
- volatile-random 随机删除快要过期的Key
- allkeys-lru 和lru一样,删除所有的Key,没有设置过期时间的Key也会被删除
- allkeys-random 和上面一样,删除掉随机的Key
Redis采用的过期策略
被动删除+主动删除
结语
本人深知水平有限,欢迎指正本文错误之处。

一文了解:Redis过期键删除策略的更多相关文章
- Redis 过期键删除策略
Redis 中数据库键的过期时间都保存在过期字典中,当一个键过期了,Redis 存在三种不同的删除策略:定时删除.惰性删除和定期删除 定时删除 定义 在设置键的过期时间的同时创建一个计时器,让定时器在 ...
- redis过期键删除策略以及大key删除方法
今天遇到了一个前同事挖的坑,刷新缓存中商品信息时先让key过期,然后从数据库里取最新数据然后再放到缓存中,他是这样写的 redisTemplate.expire(CacheConst.GOOGS_PR ...
- redis中key的过期键删除策略
Redis过期键删除策略 Redis key过期的方式有三种: 被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key 主动删除:由于惰性删除策略无法保证冷数据被及时删 ...
- Redis系列(五):Redis的过期键删除策略
本篇博客是Redis系列的第5篇,主要讲解下Redis的过期键删除策略. 本系列的前4篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装 Redis系列(二):Redis的5种数 ...
- Redis的过期键删除策略
文章首发于公众号:蘑菇睡不着,欢迎来看看 前言 Redis 中都是键值对的存储形式,键都是字符串类型的,而值有很多种类型,如 string.list.hash.set.sorted set等类型.当设 ...
- 【Redis】过期键删除策略和内存淘汰策略
Redis 过期键策略和内存淘汰策略 目录 Redis 过期键策略和内存淘汰策略 设置Redis键过期时间 Redis过期时间的判定 过期键删除策略 定时删除 惰性删除 定期删除 Redis过期删除策 ...
- redis的3种过期键删除策略
Redis的过期键的过期时间都保存在过期字典中,过期键的删除策略有三种,分别是定时删除.惰性删除和定期删除. 定时删除 定时删除策略,是指在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时 ...
- redis过期键的策略
一.过期时间设置: 127.0.0.1:6379> expire key seconds //设置键的过期时间为多少秒 127.0.0.1:6379> setex key seconds ...
- redis学习笔记——Redis过期键的删除策略
Redis过期键的删除策略 对于过期键一般有三种删除策略 定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作: 惰性删除:放任键过期 ...
随机推荐
- 使用Optional摆脱NPE的折磨
在目前的工作中,我对Java中的Stream和Lambda表达式都使用得很多,之前也写了两篇文章来总结对应的知识. 024:Java流实现Shell:cat 1.log | grep a | sort ...
- .NetCore应用多个target framework
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFrameworks> ...
- SpringBoot 2.0.3 源码解析
前言 用SpringBoot也有很长一段时间了,一直是底层使用者,没有研究过其到底是怎么运行的,借此机会今天试着将源码读一下,在此记录...我这里使用的SpringBoot 版本是 2.0.3.RE ...
- 大数据 SQL Boy 脱坑指南
不可否认的是 SQL 是一个伟大的发明,它让增删改查的操作更加地便捷化,而且 SQL 的学习成本相对其他编程语言来说较低,被逼到会写 SQL 的运营和产品我都见过不少... 大数据行业跟 SQL 更是 ...
- 20141209-基本概念-BlogEngine.NET(1)-笔记
最近在读BlogEngine.NET3.1源代码,希望能坚持到底吧. 刚接触源代码,没有思路,于是读了14篇关于BlogEngine.Net1.4.5的系列博客,地址:http://www.cnblo ...
- KVM :vnc 远程控制kvm创建虚拟机
一.vnc远程控制服务器 前期准备: 1.编辑/etc/hosts vi /etc/hosts 10.1.16.32 kvm 2.关闭防火墙 service iptables stop 3.关闭sel ...
- [记录]NGINX配置HTTPS性能优化方案一则
NGINX配置HTTPS性能优化方案一则: 1)HSTS的合理使用 2)会话恢复的合理使用 3)Ocsp stapling的合理使用 4)TLS协议的合理配置 5)False Start的合理使用 6 ...
- [HAOI2006]聪明的猴子 题解
题意: 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水面上.猴子不会游泳,但跳跃能力比较强,它们仍然可以在 ...
- 「数据分析」Sqlserver中的窗口函数的精彩应用-问题篇
最近看到PowerBI圈子在讨论最大连续区间段的问题,即某人最大的全勤时间,某人的最长的连续打卡时间等问题的计算,佐罗老师给出了10万倍性能的答案.这个问题也引发了笔者一些兴趣,隐约记得以前看过Sql ...
- 2019年7月19日 - LeetCode0001
https://leetcode-cn.com/problems/two-sum/ 我的方法: class Solution { public int[] twoSum(int[] nums, int ...