彻底理解Redis有效期问题
EXPIRE key seconds
起始版本:1.0.0
时间复杂度:O(1)
返回值:1 如果成功设置过期时间;0 如果key不存在或者不能设置过期时间。
为给定 key设置生存时间,当 key过期时(生存时间为 0),它会被自动删除。
1.过期时间跟着key走,与值无关
在Redis中,带有过期时间的key被称为『易失的』(volatile)。 过期时间可以通过使用 DEL命令来删除整个key来移除,或者被 SET和 GETSET命令覆写(overwrite),这意味着,如果一个命令只是修改(alter)一个带过期时间的 key的值而不是用一个新的 key值来代替(replace)它的话,那么过期时间不会被改变。比如说,对一个 key执行 INCR命令,对一个列表进行 LPUSH命令,或者对一个哈希表执行 HSET命令,这类操作都不会修改 key本身的过期时间。
2.设置永久有效期
使用PERSIST命令可以清除超时,使其变成一个永久的key。
3.rename命令对有效期影响
如果key被RENAME命令修改,相关的超时时间会转移到新key上面。
如果key被RENAME命令修改,比如原来就存在Key_A,然后调用RENAME Key_B Key_A命令,这时不管原来Key_A是永久的还是设置为超时的,都会由Key_B的有效期状态覆盖。
4.刷新过期时间
对已经有过期时间的key执行EXPIRE操作,将会更新它的过期时间。
5.过期精度
在 Redis 2.4 及以前版本,过期期时间可能不是十分准确,有0-1秒的误差。
从 Redis 2.6 起,过期时间误差缩小到0-1毫秒。
6.外界因素对过期时间影响
Keys的过期时间使用Unix时间戳存储(从Redis 2.6开始以毫秒为单位)。这意味着即使Redis实例不可用,时间也是一直在流逝的。
要想过期的工作处理好,计算机必须采用稳定的时间。 如果你将RDB文件在两台时钟不同步的电脑间同步,有趣的事会发生(所有的 keys装载时就会过期)。
即使正在运行的实例也会检查计算机的时钟,例如如果你设置了一个key的有效期是1000秒,然后设置你的计算机时间为未来2000秒,这时key会立即失效,而不是等1000秒之后。
7.Redis如何淘汰过期的keys
Redis keys过期有两种方式:被动和主动方式。
当一些客户端尝试访问它时,key会被发现并主动的过期。
当然,这样是不够的,因为有些过期的keys,永远不会访问他们。无论如何,这些keys应该过期,所以定时随机测试设置keys的过期时间。所有这些过期的keys将会删除。
具体就是Redis每秒10次做的事情:
1).测试随机的20个keys进行相关过期检测。
2).删除所有已经过期的keys。
3).如果有多于25%的keys过期,重复步奏1.
这是一个平凡的概率算法,基本上的假设是,我们的样本是这个密钥控件,并且我们不断重复过期检测,直到过期的keys的百分比低于25%,这意味着,在任何给定的时刻,最多会清除1/4的过期keys。
8.在复制AOF文件时如何处理过期
为了获得正确的行为而不牺牲一致性,当一个key过期,DEL将会随着AOF文字一起合成到所有附加的slaves。在master实例中,这种方法是集中的,并且不存在一致性错误的机会。
然而,当slaves连接到master时,不会独立过期keys(会等到master执行DEL命令),他们任然会在数据集里面存在,所以当slave当选为master时淘汰keys会独立执行,然后成为master。
彻底理解Redis有效期问题相关推荐
- cxgrid主从表 点+号展开_深入理解Redis主从复制
一.背景 前面的文章中,我们介绍过Redis的持久化机制,它可以实现Redis实例数据的crash-safe.但是这里有一个问题,就是Redis其实还存在着单点故障问题,比如说Redis的硬盘坏掉了, ...
- redis集群扩容和缩容_深入理解Redis Cluster集群
一.背景 前面的文章<深入理解Redis哨兵机制>一文中介绍了Redis哨兵集群的工作原理,哨兵集群虽然满足了高可用的特性,但是依然存在这样的问题:即数据只能往一个主节点上进行写入. 只能 ...
- curl 请求没反应_理解Redis的反应堆模式
本文首发于: 理解Redis的反应堆模式mp.weixin.qq.com 微信公众号:后端技术指南针 欢迎关注 接收最新文章! 1. Redis的网络模型 Redis基于Reactor模式(反应堆模 ...
- 深入理解redis复制原理
深入理解redis复制原理 1.复制过程 2.数据间的同步 3.全量复制 4.部分复制 5.心跳 6.异步复制 1.复制过程 从节点执行 slaveof 命令. 从节点只是保存了 slaveof 命令 ...
- Redis学习(一)—生活中实用场景帮助理解redis的五种基本数据类型
Redis实例目录 (一)String (1)业务场景1--分库分表后获取唯一id (2)业务场景2--数据时效性设置 (3)业务场景3--高频数据访问显示 实现方式一 实现方式二 (二)Hash ( ...
- 深入浅出理解Redis
深入浅出理解Redis 一.概念: redis是一款高性能的NOSQL系列的非关系型数据库 1.1.什么是NOSQL NoSQL(NoSQL = Not Only SQL),意即"不仅仅是S ...
- 【死磕 Redis】------ 理解 Redis 的内存
原文:https://www.topjava.cn/category/1391389927996002304 『chenssy』 我们知道 Redis 的所有数据都存储在内存中,内存是我们系统中的一个 ...
- 深入理解Redis Cluster和Jedis Cluster
本文转载自:https://zhuanlan.zhihu.com/p/69800024 Redis Cluster是Redis官方提供的集群解决方案.由于业务的飞速增长,单机模式总会遇到内存.性能等各 ...
- 深入理解Redis主键失效原理及实现机制
2019独角兽企业重金招聘Python工程师标准>>> 作为一种定期清理无效数据的重要机制,主键失效存在于大多数缓存系统中,Reids也不例外.在Redis提供的诸多命令中, EXP ...
最新文章
- 微软MCITP系列课程(四)磁盘系统管理
- HDOJ 2176 取石子游戏
- YOLOv2和YOLOv3效果对比
- 【机器学习】3万字长文,PySpark入门级学习教程,框架思维
- Linux节点之间无密码问题,Linux下多节点SSH无密码互联实现
- String和string的区别
- php网站搭建致命错误203终止,PHP致命错误:无法重新分配$this
- Object C学习笔记11-数组
- 语言 ota_荣威RX5 PLUS使用最新的家族设计语言,给人更年轻时尚的感觉
- 计算机视觉实习面经【微软/阿里/腾讯】
- 【鲲鹏 DevKit黑科技解读】│如何实现全链路系统问题90%精准诊断?
- fetchxml 汇总_Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧
- Hibernate在配置表映射文件时cascade的类型及意义
- 安装idea(最新版IntelliJ IDEA)编译器(详细到每步)
- 多种方法去除按钮以及链接点击时虚线
- book mac pro怎么重装系统_苹果13英寸新MacBook Pro怎么重装win7系统
- 德州农工大学计算机专业研究生,德州农工大学计算机工程(无论文)理学硕士研究生申请要求及申请材料要求清单...
- 集成显卡和独立显卡的区别
- Linux系统快速查看CPU和内存使用情况,附各参数详解
- 惠普HP LaserJet Pro M405d 打印机驱动