redis expire超时操作

基本使用:
127.0
.0.1:6379> EXPIRE user 1000 (integer) 1 127.0.0.1:6379> ttl user # 查看剩余超时时间 (integer) 996

超时重置

  有些redis命令会清除key的超时时间,如set,del,getset和所有的*Store命令。即修改redis的值而不是替换的化将不会修改key的超时时间。像incr、hset、lpush不会改变key的超时设置,也可以通过命令pexpire手动清除超时,将key变成持久的key。

     重命名key不会清除key的超时时间。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
127.0.0.1:6379> set name hh
OK
127.0.0.1:6379> EXPIRE name 30
(integer) 1
127.0.0.1:6379> ttl name
(integer) 27
127.0.0.1:6379> set name h1 ## set后会清除key的超时时间
OK
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> EXPIRE name 20
(integer) 1
127.0.0.1:6379> GETSET name h2
"h1"
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379>

  修改命令不会重置超时时间

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> LPUSH namelist hh
(integer) 1
127.0.0.1:6379> EXPIRE namelist 20
(integer) 1
127.0.0.1:6379> ttl namelist
(integer) 18
127.0.0.1:6379> lpush namelist h2
(integer) 2
127.0.0.1:6379> ttl namelist
(integer) 3

  

redis的key如何过期

  redis中key过期有两种,主动过期和被动过期。

  被动过期:当访问一个key时被发现过期。

  主动过期:redis会定期的从自己维护的有expire属性的key集中随机测试一些键的过期时间,过期的键会被删除。

    具体机制为:

    1. 从具有过期属性的key集中随机抽取20个key。
    2. 删除所有过期的key。
    3. 如果过期的key占比超过25%,重复第一步。

在副本和AOF文件中如何处理过期

  redis主节点在key过期时,会生成一个del命令保存到AOF文件或发送到从节点,即从节点自己不会主动过期key,而是接受主服务器的del,但是从节点仍然保存着key的过期信息,以便在主节点挂掉时,从节点在被选为主节点时有能力删除过期的键。

posted @   hhanhao  阅读(2422)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示