键的过期时间

在使用Redis存储数据的时候,有些数据可能在某个时间点之后就不再有用了,用户可以使用DEL命令显示删除这些无用数据,也可以通过Redis的过期时间(expiration)特征来让一个键再给定的时限(timeout)之后自动被删除。当我们说一个键【带有生存时间】(time to live)或者一个键【会在特定时间之后过期】时,我们指的是Redis会在这个键的过期时间到达时自动删除该键。

虽然过期时间特性对于清理缓存数据非常有用,不过通常只有少数几个命令可以原子地为键设置过期时间,并且对于列表、集合、散列和有序集合这样的容器来说,键过期命令只能为整个键设置过期时间,而没办法为键里面的单个元素设置过期时间(为了解决这个问题,可以使用存储时间戳的有序集合来实现针对的那个元素的过期操作)。

本节将对那些可以在给定时限或者给定时间之后,自动删除过期键的Redis命令进行介绍。通过阅读本节,读者可以学会如何使用过期操作来自动删除过期数据并降低Redis的内存占用。

下表列出了Redis提供的用于为键设置过期时间的命令,已经查看键的过期时间的命令:

命令 示例 描述
persist persist key-name 移除键的过期时间
ttl ttl key-name 查看给定键距离过期还有多少秒
expire expire key-name seconds 让给定键再指定的秒数之后过期
expireat expireat key-name timestamp 将给定键的过期时间设置为给定的UNIX时间戳。
pttl pttl key-name 查看给定键距离过期时间还有多少毫秒,这个命令在Redis2.6或以上版本可用,
pexpire pexpire key-name milliseconds 让给定键再指定的毫秒之后过期。这个命令在Redis2.6或以上版本可用。
pexpireat pexpireat key-name timestamp-milliseconds 将一个毫秒级精确的UNIX时间戳设置为给定键的过期时间,这个命令在Redis2.6或以上版本可用。

下面代码展示了几个对键执行过期时间操作的例子:

import redis  # 导入redis包包
import time


# 与本地redis进行链接,地址为:localhost,端口号为6379
r = redis.StrictRedis(host='localhost', port=6379)
r.delete('trans:')

#设置一个简单的字符串值作为过期时间的设置对象
print(r.set('key','value'))
print(r.get('key'))
print(r.expire('key',2))

time.sleep(1)

#查看键距离过期还有多长时间
print(r.ttl('key'))

time.sleep(1)

#此时键已经过期,并被删除
print(r.get('key'))

运行结果:

True
b'value'
True
1
None

results matching ""

    No results matching ""