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
当已用的内存超过 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 采用的过期策略
被动删除+主动删除
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
cpu
+关注
关注
68文章
10816浏览量
210978 -
数据
+关注
关注
8文章
6852浏览量
88771 -
key
+关注
关注
0文章
48浏览量
12808 -
Redis
+关注
关注
0文章
371浏览量
10834
发布评论请先 登录
相关推荐
我用labSQL中的ADO Recordset Delete Record.vi 函数删除数据库中的一
求助:我用labSQL中的ADO Recordset Delete Record.vi 函数删除数据库中的一行记录,为啥不得行呢?运行之后,数据库里面并没有删除啊?出现的问题是:ADO
发表于 12-02 14:57
在labview使用sql语句删除数据库中的重复内容出现错误,求解
最近一直在自学使用labview控制数据库,相关的书籍资料都不多,有相同兴趣的欢迎沟通互相学习使用labsql一直出现问题,之前排序的运行成功却发现只是对查询数据进行排序不能对本身这次需要删除数据库中重复内容,我查找了相关语句,
发表于 03-07 12:30
《Visual C# 2008程序设计经典案例设计与实现》---动态删除数据库数据信息
《Visual C# 2008程序设计经典案例设计与实现》---动态删除数据库数据信息.zip
发表于 06-25 16:48
如何使得redis中的数据不再有
嵌入式Linux系统重启后如何使得redis中的数据不再有今天在工作中遇到一个问题:网页展示redis中的数据,然而再Linux系统重启后网页还能展示
发表于 11-05 08:50
手机如何永久删除数据
为了保护隐私,在切换旧手机之前,需要完全清除手机数据。它一直是我们恢复出厂设置的最常用方法。恢复出厂设置的旧手机,其他人仍然可以恢复已删除的照片、数据。那么如何彻底删除旧手机上的
如何才能删除SQL数据局镜像
SQLSERVER删除数据库镜像 SQLServer删除数据库镜像,其实这之前有个很诡异的问题。..在数据库镜像断开后,如何从新建立镜像的连接呢?
发表于 09-26 17:51
•18次下载
微软「全息云存储」来了!玻璃做介质,用光记录或删除数据
你能想象吗,未来有望实现 全系存储了!什么意思呢,就是利用光来记录数据页、玻璃作为介质实现云上存储。全息晶体可以填充密集的数据,若想删除数据,只需用紫外光就能擦除,也太酷了吧! 这是微软研究院的一项
Redis 的数据清理策略
本文整理 Redis 的数据清理策略所有代码来自 Redis version :5.0, 不同版本的 Redis 策略可能有调整
发表于 09-19 14:24
•352次阅读
Redis的删除策略和内存淘汰机制介绍
执行之前都会调用 expireIfNeeded函数对其进行检查,如果过期,则删除该键,然后执行键不存在的操作;未过期则不作操作,继续执行原有的命令。 定期删除:由Redis.c/activeExpireCycle 函数实现,函数
评论