redis设置过期时间的原理_redis过期时间原理-程序员宅基地

技术标签: redis  

一、有效时间设置:

redis对存储值的过期处理实际上是针对该值的键(key)处理的,即时间的设置也是设置key的有效时间。Expires字典保存了所有键的过期时间,Expires也被称为过期字段。 
四种处理策略

  1. EXPIRE 将key的生存时间设置为ttl秒
  2. PEXPIRE 将key的生成时间设置为ttl毫秒
  3. EXPIREAT 将key的过期时间设置为timestamp所代表的的秒数的时间戳
  4. PEXPIREAT 将key的过期时间设置为timestamp所代表的的毫秒数的时间戳

其实以上几种处理方式都是根据PEXPIREAT来实现的,设置生存时间的时候是redis内部计算好时间之后在内存处理的,最终的处理都会转向PEXPIREAT。 
1、2两种方式是设置一个过期的时间段,就是咱们处理验证码最常用的策略,设置三分钟或五分钟后失效,把分钟数转换成秒或毫秒存储到redis中。 
3、4两种方式是指定一个过期的时间 ,比如优惠券的过期时间是某年某月某日,只是单位不一样。

二、过期处理

过期键的处理就是把过期键删除,这里的操作主要是针对过期字段处理的。 
Redis中有三种处理策略:定时删除、惰性删除和定期删除。

  1. 定时删除:在设置键的过期时间的时候创建一个定时器,当过期时间到的时候立马执行删除操作。不过这种处理方式是即时的,不管这个时间内有多少过期键,不管服务器现在的运行状况,都会立马执行,所以对CPU不是很友好。
  2. 惰性删除:惰性删除策略不会在键过期的时候立马删除,而是当外部指令获取这个键的时候才会主动删除。处理过程为:接收get执行、判断是否过期(这里按过期判断)、执行删除操作、返回nil(空)。
  3. 定期删除:定期删除是设置一个时间间隔,每个时间段都会检测是否有过期键,如果有执行删除操作。这个概念应该很好理解。

看完上面三种策略后可以得出以下结论: 
4. 1、3为主动删除,2为被动删除。 
5. 1是实时执行的,对CPU不是很友好,但是这在最大程度上释放了内存,所以这种方式算是一种内存优先优化策略。 
6. 2、3为被动删除,所以过期键应该会存在一定的时间,这样就使得过期键不会被立马删除,仍然占用着内存。但是惰性删除的时候一般是单个删除,相对来说对CPU是友好的。 
7. 定期键这种删除策略是一种让人很蛋疼的策略,它既有避免1、2两种策略劣势的可能,也有同时发生1、2两种策略劣势的可能。如果定期删除执行的过于频繁就可能会演变成定时删除,如果执行的过少就有可能造成过多过期键未被删除而占用过多内存,如果时间的设置不是太好,既可能占用过多内存又同时对CPU产生不好的影响。所以。使用定期删除的时候一定要把握好这个删除的时间点。

三、主从服务器删除过期键处理

有三种:RDB持久化、AOF持久化和复制功能。

RDB: 
1. 主服务器模式运行在载入RDB文件时,程序会检查文件中的键,只会加载未过期的,过期的会被忽略,所以RDB模式下过期键不会对主服务器产生影响。 
2. 从服务器运行载入RDB文件时,会载入所有键,包括过期和未过期。当主服务器进行数据同步的时候,从服务器的数据会被清空,所以RDB文件的过期键一般不会对从服务器产生影响。

AOF: 
AOF文件不会受过期键的影响。如果有过期键未被删除,会执行以下动作: 
客户端请求时(过期键):

  1. 从数据库充删除被访问的过期键;
  2. 追加一条DEL 命令到AOF文件;
  3. 向执行请求的客户端回复nil(空)。

复制:

  1. 主服务器删除过期键之后,向从服务器发送一条DEL指令,告知删除该过期键。
  2. 从服务器接收到get指令的时候不会对过期键进行处理,只会当做未过期键一样返回。(为了保持主从服务器数据的一致性)
  3. 从服务器只有接到主服务器发送的DEL指令后才会删除过期键。 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_27469747/article/details/80128184

智能推荐

HBuilderX 打包APK_hbuilderx怎么打包成apk-程序员宅基地

文章浏览阅读224次。HBuilderX 打包APK。_hbuilderx怎么打包成apk

HDU-1715 (大斐波数)-程序员宅基地

文章浏览阅读142次。题目:Fibonacci数列,定义如下:f(1)=f(2)=1f(n)=f(n-1)+f(n-2) n>=3。计算第n项Fibonacci数值。Input输入第一行为一个整数N,接下来N行为整数Pi(1<=Pi<=1000)。Output输出为N行,每行为对应的f(Pi)。Sample Input512345...

ros创建xacro模型_ros noetic 如何写xacro模型-程序员宅基地

文章浏览阅读1.4k次,点赞2次,收藏7次。环境:ubuntu18xacro编辑源文件概览:ubuntu@ubuntu-vpv:~/mybot_ws$ tree src/ src/├── CMakeLists.txt -> /opt/ros/melodic/share/catkin/cmake/toplevel.cmake└── mybot_description ├── CMakeLists.txt ├── config │ └── mybot_urdf.rviz ├── launch _ros noetic 如何写xacro模型

(附源码)springboot基于微信小程序的校园体育运动场地及器材租凭系统设计与实现 毕业设计131052-程序员宅基地

文章浏览阅读242次。校园体育运动场地及器材租凭系统 的设计主要是对系统所要实现的功能进行详细考虑,确定所要实现的功能后进行界面的设计,在这中间还要考虑如何可以更好的将功能及页面进行很好的结合,方便用户可以很容易明了的找到自己所需要的信息,还有系统平台后期的可操作性,通过对信息内容的详细了解进行技术的开发。校园体育运动场地及器材租凭系统的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与校园体育运动场地及器材租凭系统的实际需求相结合,讨论了基于校园体育运动场地及器材租凭系统的使用。

高性能计算(HPC)-一文全面理解高性能计算_hpc领域-程序员宅基地

文章浏览阅读1.5k次,点赞31次,收藏24次。AI的疯狂发展以及视频、图像、音频、3D数据的迫切需要,导致传统的CPU不能满足这样大算力的计算。由于这些数据的运算多是一些简单的运算,因此需要设计出多个算术运算单元的芯片来应对这种少控制多计算的场景。这是并行计算、高性能计算诞生的重要动力。为了适配这样的场景,设计出了以GPU为核心的并行处理芯片、包括DSP、VPU、DPU、NPU等。本文主要介绍基于这些芯片以及网络、系统引入的高性能计算,比较全面的介绍高性能计算,希望对高性能计算的理解起到一个宏观的作用。:一个全栈工程师的升级之路!_hpc领域

俄亥俄大学计算机科学专业,美国计算机科学专业最新排名!-程序员宅基地

文章浏览阅读145次。1 Carnegie Mellon University 卡内基梅隆大学1 Massachusetts Institute of Technology 麻省理工学院1 Stanford University 斯坦福大学1 University of California -Berkeley 加州大学伯克利分校5 Cornell University 康奈尔大学5 University of Ill..._俄亥俄大学计算机科学专业

随便推点

VSCode配置Eclipse快捷键-程序员宅基地

文章浏览阅读202次,点赞9次,收藏5次。有时候我们可能会同时使用很多种IDE,每种IDE又有不同的Keymap,快捷键用起来很头疼。比如我,我最早是使用eclipse的,后来就习惯了eclipse的快捷键,哪怕用Android Studio、Clion、Virtual Studio等等我都喜欢切换成eclipse的快捷键,大大加快效率。提示:以下是本篇文章正文内容,下面案例可供参考1、这不是偶然,很多知名的IDE都有这个功能,因为它真的很有用。

分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(11月28日-12月4日)-程序员宅基地

文章浏览阅读1.6k次。分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(11月28日-12月4日)本周Silverlight学习资源更新Silverlight HttpUtil 封装Post调用nivana999Silverlight中Grid.ColumnDefinitions属性设置错误xjbestSilverli

工业互联网平台选型星级评估申请要求-程序员宅基地

文章浏览阅读116次,点赞5次,收藏3次。工业互联网

iPhone网页显示不全(被遮挡)怎么办?-程序员宅基地

文章浏览阅读1.2w次。iPhone网页显示不全(被遮挡)怎么办?今天再次遇到了这样一个历史遗留问题:我们在用iPhone浏览部分网页时,有时候会出现部分选项被界面遮挡的情况,如:

在eclipse中使用vim-程序员宅基地

文章浏览阅读52次。转自:http://blog.csdn.net/eplaylity/article/details/6168283 1. vrapper(开源) 直接从eclipse安装即可,地址:http://vrapper.sourceforge.net/update-site/stable/ 2. viplugin(收费) 下载后,拷贝到eclipse相应目录即可,地址 http://www.vip..._在eclipse中配置vim编辑

使用JDK命令排查故障实战案例详解_jdk巡检的检查项-程序员宅基地

文章浏览阅读2.2k次,点赞8次,收藏12次。文章目录服务器CPU使用率达到99%程序发生了死锁java应用大量消耗内存 学习了JDK命令,就是为了排查故障的,今天通过几个分类来了解在程序遇到故障的时候,如果使用JDK命令排查问题服务器CPU使用率达到99% 这里我们先写一个demo,写一个死循环..._jdk巡检的检查项