redis过期时间实现原理_redis过期时间实现原理

redis过期时间实现原理_redis过期时间实现原理一、有效时间设置:redis对存储值的过期处理实际上是针对该值的键(key)处理的,即时间的设置也是设置key的有效时间。Expires字典保存了所有键的过期时间,Expires也被称为过期字段。 四种处理策略EXPIRE将key的生存时间设置为ttl秒PEXPIRE将key的生成时间设置为ttl毫秒EXPIREAT将key的过期时间设置为timestamp所代表的的秒数的时间戳PEXPIR…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、有效时间设置:

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指令后才会删除过期键。 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/189377.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • shell脚本介绍、结构和执行、date命令用法、shell脚本中的变量「建议收藏」

    shell脚本介绍、结构和执行、date命令用法、shell脚本中的变量

  • 3.5使用RangeValidator控件

    3.5使用RangeValidator控件使用RangeValidator控件检测表单字段的值是否在指定的最小值和最大值之间五个属性:ControlToValidate—被验证的表单字段的IDText--验证失败时显示的错误信息MininumValueMaxinumValueType-比较类型:String,Integer,Double,Date和Currency默认为String[code…

  • 河北2021文科一本分数线_19年文科二本分数线

    河北2021文科一本分数线_19年文科二本分数线2017年河北文科高考成绩排名一分一档表,河北高考文科成绩排名查询河北省共有40.48万人报名参加2017年高考,比2017年减少1.34万人,这已是河北省报考人数连续第七年下降。统计数据显示,统考报名人数为37.82万人,比2017年减少1.45万人;对口高考2.28万人,与2013年基本持平;只参加各种单独招生的近3800人,比2017年增加近1200人。报名考生中,应届考生34.73万人,社…

  • Postman安装与简单使用[通俗易懂]

    Postman安装与简单使用[通俗易懂]Postman使用参考文档:1.官方英文文档2.chrome插件整理的postman中文使用教程Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。官方网站:https://www.getpostman.com/下载1>、postman下载地址:1.PostmanforMAC2.Postman..

  • java键盘钩子_jna test【鼠标 键盘钩子】「建议收藏」

    java键盘钩子_jna test【鼠标 键盘钩子】「建议收藏」jna4.5简单实现后台键盘事件通过jna实现在后台运行,当屏幕按下相对应的按钮时JAVA实现鼠标钩子的源代码仅用JAVA实现全局鼠标钩子的功能,很好很超强,学习下java全局按键键盘钩子java鼠标按键钩子,内含test.java使用实例,hook文件夹是写好的钩子,放到项目源文件下,直接调用。两个jar包是必须建立到项目中的c#Wpf简单鼠标钩子实例一个简单的鼠标钩子例子帮助初学者掌握。基于…

  • VDBENCH 试用

    VDBENCH 试用linux环境首先安装java环境建议直接安装jdk,32或者64,看你linux的版本。vdbench目录下 ./vdbench-t

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号