博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
讨论一下redis的过期键删除机制
阅读量:7174 次
发布时间:2019-06-29

本文共 772 字,大约阅读时间需要 2 分钟。

近来重新复习了一下redis,对redis的理解又深入一层。

百度谷歌上搜到资料有一些压根是错的,但是却被放在了搜索结果前几个,感觉无奈无爱! (当然我也不保证我的是全对的,毕竟不同角度有不同的看法)

参考资料书籍:Redis设计与实现 出版社:机械工业出版社。P107 ~ P111

问题:如果一个键过期了,那么它什么时候会被删除呢?有三个答案

定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在过期时间来临时,立即执行对键的删除操作 .。

这种过期策略对内存友好,但对CPU是非常不友好的。因为还要主动设定定时器并主动删除,即通过CPU换内存(CPU主动删除了内存中的数据嘛,CPU忙,内存空闲)。可以想象一下在大数据大并发的时候,这种机制是多么灾难

惰性删除(Lazy Expiration):redis内部不会监视记录是否过期,但是每次从键空间获取键时,检查记录是否过期。这种技术被称为lazy(惰性)expiration。

与定时删除相反,此删除机制对内存是不友好的对CPU是友好的,惰性删除不会主动去删除已到期(expire)的键,而是等有需要调用的时候再判断,即内存换CPU(内存中有大量残留数据)

定期删除:每隔一段时间,对redis数据库进行一次检查,删除里面的过期键

属于前两种方法的折中.但要注意操作检查执行的时间和频率,如果删除操作做的太频繁,或者检查执行的时间太长,定期策略就会退化成定时策略。

如果检查执行的频率太少或者检查执行的时间太少,就会变成和惰性策略一样。

Redis服务器实际使用的是惰性删除和定期删除策略两种策略,配合使用两种策略和在使用CPU和内存找到平衡点。

惰性删除为redis服务器内置策略,定期删除在redis.conf 的hz选项,默认为10 (即1秒执行10次,100ms一次)

转载地址:http://dudzm.baihongyu.com/

你可能感兴趣的文章
Beginning Python From Novice to Professional (5) - 条件与循环
查看>>
Java中WebService实例
查看>>
php中对共享内存,消息队列的操作
查看>>
改变恶习
查看>>
Linux下查看文件和文件夹大小
查看>>
SkipList 跳表
查看>>
ASP.NET MVC 3 入门级常用设置、技巧和报错
查看>>
Netty In Action中文版 - 第一章:Netty介绍
查看>>
抽象工厂例子
查看>>
sublime text 3 安装
查看>>
java final keyword
查看>>
怎么在spring官网上下载spring的jar包, 源代码和文档?
查看>>
StringUtilsd的isEmpty、isNotEmpty、isBlank、isNotBlank
查看>>
Objective-C类的使用
查看>>
IE无法打开internet网站已终止操作的解决的方法
查看>>
基于jQuery商品分类选择提交表单代码
查看>>
解读ASP.NET 5 & MVC6系列(4):核心技术与环境配置
查看>>
CDT+Eclipse代码自动提示
查看>>
shell 下执行mysql 命令
查看>>
[PHP] - PDO事务操作
查看>>