设置键的生存时间或过期时间
通过EXPIRE命令或者PEXPIRE命令,客户端可以以秒或者毫秒精度为数据库中的某个键设置生存时间(Time To Live,TTL),在经过指定的时间之后,服务器就会自动删除生存时间为0的键。
set key value EXPIRE key 5 GET key
与EXPIRE命令和PEXPIRE命令类似,客户端可以通过EXPIREAT命令或PEXPIREAT命令,以秒或毫秒精度给键设置过期时间(expire time).过期时间是一个UNIX时间戳,当键的过期时间来临时,服务器就会自动从数据库中删除这个键。
SET key value EXPIREAT key 1371234567 TIME //当前时间 GET key TIME //当前时间 GET keyTTL命令和PTTL命令接收一个带有生存时间或者过期时间的键,返回这个键的剩余生存时间,也就是距离这个键被服务器自动删除还有多长时间。
SET key value EXPIRE key 1000 TTL key PTTL msgRedis有四种不同的命令可以用于设置键的生存时间。
- EXPIRE $key $TTL 设置key的过期时间为TTL秒
- PEXPIRE $key $TTL 设置key的过期时间为TTL毫秒
- XPIREAT $key $timestamp 设置key过期时间为指定的timestamp秒数
- PXPIREAT $key $timestamp 设置key过期时间为指定的timestamp毫秒数
过期键删除策略
如果一个键过期了,可能会有三种删除策略:定时删除、惰性删除、定期删除。
定时删除
定时删除策略对内存是最友好的,通过使用定时器,定时删除策略可以保证过期键会尽可能快的被删除,并释放过期键所占用的内存。
另一方面,定时删除策略缺点是,它对CPU时间是不友好的,在过期键比较多的情况下,删除过期键这一行为可能会占用相当一部分CPU时间,在内存不紧张但是CPU时间非常紧张的情况下,将CPU时间用在删除和当前任务无关的过期键上,无疑会对服务器的响应时间和吞吐造成影响。
惰性删除
惰性删除策略对CPU时间来说是友好的,程序只会在取出键时才进行过期检查,这可以保证删除过期键的操作只会在非做不可的情况下进行,并且删除的目标仅限于当前处理的键,这个策略不会再删除其他无关的键上花费任何时间。
惰性删除的缺点是,它对内存是不友好的,如果一个键已经过期,而这个键有仍然保留在数据库中,那么只要这个键不被删除,内存就不会释放。在使用惰性删除策略是,如果数据库中有非常多的过期键,而这些过期键又敲好没有被访问到,那么他们永远也不会被删除。
定期删除
从定时删除和惰性删除来看,这两种删除方式单一--使用时都有明显的缺陷:
- 定时删除占用太多CPU时间,影响服务器的响应时间和吞吐量
- 惰性删除浪费太多内存,有内存泄漏的危险
定期删除时前两种策略的一个折中:
- 定期删除策略每隔一段时间执行一次删除过期键的操作,并通过限制删除操作执行时常和频率来减少删除操作对CPU时间的影响
- 通过定期删除键,定期删除策略有效的减少了因为过期而带来的内存浪费
定期删除策略的难点是确定删除执行的时长和频率:
- 如果删除操作执行的太频繁或者执行的时间太长,定期删除策略会退化成定时删除策略,以至于将CPU时间过多地消耗在删除过期键上面。
- 如果删除操作执行的太少,或者执行的时间太短,定期删除策略又会和惰性删除策略一样,出现浪费内存的情况。
因此,如果采用定期删除策略的话,服务器必须根据情况,合理地设置删除策略执行的时间和执行频率。
RDB和复制功能对过期键的处理
在执行SAVE命令或者BGSAVE命令创建一个新的RDB文件时,程序会对数据库中的键进行检查,已过期的键不会被保存到新创建的RDB文件中。因此,数据库中包含过期键不会对生成新的RDB文件造成影响。
在启动redis服务器时,如果服务器开启了RDB功能,那么服务器将对RDB文件进行载入:
- 如果服务器以主服务器模式运行,那么在载入RDB文件时,程序会对文件保存的键进行检查,未过期的键会被载入到数据库中,而过期键则会被忽略,所以过期键对载入RDB文件的嘱咐其不会造成影响。
- 如果以从服务器模式运行,那么在载入RDB文件时,文件中保存的所有键,不论是否过期,都会被载入到数据库中。不过,因为主从服务器在进行数据同步的时候,从服务器的数据就会被清空,所以一般来讲,过期键对载入RDB文件的从服务器也不会造成影响。
当服务器运行在复制模式下时,从服务器的过期键删除动作由主服务器控制:
- 主服务器在删除一个过期键之后,会显式的向所有从服务器发送一个DEL命令,告知从服务器删除这个过期键
- 从服务器在执行客户端发送的读命令是,即使碰到过期键也不会将过期键删除,而是继续像处理未过期的键一样来处理过期键。
- 从服务器只有在接到主服务器发来的DEL命令之后,才会删除过期键。
通过主服务器来控制从服务器统一删除过期键,可以保证主从服务器数据一致,也正是因为这个原因,当一个过期键仍然存在于主服务器的数据库时,这个过期键在从服务器的复制时也会继续存在。
相关推荐
setting.xml文件,修改Maven仓库指向至阿里仓
基于java的玉安农副产品销售系统的开题报告
dev-c++ 6.3版本
基于java的项目监管系统开题报告
基于springboot多彩吉安红色旅游网站源码数据库文档.zip
毕业设计&课设_基于 AFLFast 改进能量分配策略的毕业设计项目,含 Mix Schedule策略设计及测试结果分析.zip
基于springboot办公用品管理系统源码数据库文档.zip
C++调用qml对象Demo
非常漂亮的类Web界面的Delphi设计54ed7-main.zip
VB SQL车辆管理系统是一款基于Visual Basic(VB)编程语言和SQL数据库开发的综合车辆管理工具。该系统集成了车辆信息管理、驾驶员信息管理、车辆调度、维修记录、数据存储与检索、报告生成以及安全权限管理等多个核心功能模块。 源代码部分提供了详细的开发流程和实现方法,涵盖了从数据库设计、界面设计到事件驱动编程、数据访问技术和错误处理等关键技术点。通过该系统,用户可以方便地录入、查询、修改和删除车辆及驾驶员信息,实现车辆信息的实时更新和跟踪。同时,系统还支持生成各类车辆管理相关的报告,帮助用户更好地掌握车辆运营情况。 系统部分则采用了直观易用的用户界面设计,使得用户能够轻松上手并快速完成车辆管理工作。系统还具备强大的数据处理能力和安全性,通过数据备份和系统升级优化等功能,确保数据的完整性和系统的稳定运行。 总体而言,VB SQL车辆管理系统是一款功能全面、易于操作且安全可靠的车辆管理工具,适用于企业和个人进行日常车辆运营和管理。无论是车辆信息的录入、查询还是报告生成,该系统都能够提供高效、便捷的服务,是车辆管理工作的理想选择。
AutoSAR基础学习资源
基于springboot英语学习平台源码数据库文档.zip
数据集,深度学习,密封数据集,马体态数据集
基于java的数字家庭网站开题报告
podman使用国内源镜像加速器
基于springboot+web的留守儿童网站源码数据库文档.zip
基于springboot的智能宾馆预定系统源码数据库文档.zip
GetQzonehistory-main.zip
环境说明:开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat 开发软件:eclipse/myeclipse/idea Maven包:Maven 浏览器:谷歌浏览器。 项目经过测试均可完美运行
内容概要:本文档详细介绍了QST公司生产的QMI8A01型号的6轴惯性测量单元的数据表及性能参数。主要内容包括设备特性、操作模式、接口标准(SPI、I2C与I3C),以及各种运动检测原理和技术规格。文中还提到了设备的工作温度范围宽广,内置的大容量FIFO可用于缓冲传感器数据,减少系统功耗。此外,对于器件的安装焊接指导亦有详细介绍。 适合人群:电子工程技术人员、嵌入式开发人员、硬件设计师等。 使用场景及目标:适用于需要精准测量物体空间位置变化的应用场合,如消费电子产品、智能穿戴设备、工业自动化等领域。帮助工程师快速掌握该款IMU的技术要点和应用场景。 其他说明:文档提供了详细的电气连接图表、封装尺寸图解等资料,方便用户进行电路板的设计制作。同时针对特定应用提出了一些优化建议。