Redis 9 数据库

4 设置键的生存时间或过期时间

通过EXPIRE命令或者PEXPIRE命令,客户端可以以秒或者毫秒精度为数据库中的某个键设置生存时间(TimeToLive,TTL),在经过指定的秒数或者毫秒数之后,服务器就会自动删除生存时间为0的键:

127.0.0.1:6379> set test test
OK
127.0.0.1:6379> expire test 5
(integer) 1
127.0.0.1:6379> get test 	//5秒内
"test"
127.0.0.1:6379> get test	//5秒后
(nil)

注意
SETEX命令可以在设置一个字符串键的同时为键设置过期时间,因为这个命令是一个类型限定的命令(只能用于字符串键),所以本章不会对这个命令进行介绍,但SETEX命令设置过期时间的原理和本章介绍的EXPIRE命令设置过期时间的原理是完全一样的。

与EXPIRE命令和PEXPIRE命令类似,客户端可以通过EXPIREAT命令或PEXPIREAT命令,以秒或者毫秒精度给数据库中的某个键设置过期时间(expiretime)。这时过期时间是一个UNIX时间截,当键的过期时间来临时,服务器就会自动从数据库中删除这个键:

redis> SET key value
OK

redis> EXPIREAT key 1377257300
(integer)1

redis> TIME
1"01377257296"
2"296543"

redis> GET key		//1377257300之前
"value"

redis> TIME
1"13772573031"
2"230656"

redis>GET key	//1377257300之后
(ni1)

TTL命令和PTTL命令接受一个带有生存时间或者过期时间的键,返回这个键的剩余生存时间,也就是,返回距离这个键被服务器自动删除还有多长时间:

redis> SET key value
OK

redis> EXPIRE key 1000
(integer)1

redis> TTL key
(integer)997

redis>SET another_key another_value
OK

redis> TIME
1"1377333070"
2"761687"

redis> EXPIREAT another_key 1377333100
(integer)1

redis> TTL another_key
(inteqer)10
4.1 设置过期时间

Redis有四个不同的命令可以用于设置键的生存时间(键可以存在多久)或过期时间(键什么时候会被删除):

  • EXPIRE 命令用于将键key的生存时间设置为ttl秒。
  • PEXPIRE 命令用于将键key的生存时间设置为ttl毫秒。
  • EXPIREAT 命令用于将键key的过期时间设置为timestamp所指定的秒数时间截。
  • PEXPIREAT 命令用于将键key的过期时间设置为timestamg所指定的毫秒数时间截。

虽然有多种不同单位和不同形式的设置命令,但实际上EXPIRE、PEXPIRE、EXPIREAT三个命令都是使用PEXPIREAT命令来实现的:无论客户端执行的是以上四个命令中的哪个,经过转换之后,最终的执行效果都和执行PEXPIREAT命令一样。

首先,EXPIRE命令可以转换成PEXPIRE命令:

def EXPIRE(key,ttl_in_sec):
	# 将TTL从秒转换成毫秒
	ttl_in ms = sec_to_ms(ttl_in_sec)

	PEXPIRE(key,ttlinms)

接着,PEXPIRE命令又可以转换成PEXPIREAT命令:

def PEXPIRE(key,ttl_in ms)# 获取以毫秒计算的当前UNIX时间戳
	now_ms= get_current_unix_timestamp_in_ms()

	#当前时间加上TTL,得出毫秒格式的键过期时间
	PEXPIREAT(keynow_ms+ttl_in_ms)

并且,EXPIREAT命令也可以转换成PEXPIREAT命令:

def EXPIREAT(key,expire_time_in_sec):
	# 将过期时间从秒转换为毫秒PEXPIREEXPIREAT
	expire_time_in_ms= sec_to_ms(expire_time_in_sec)

	PEXPIREAT(key, expire_time in ms)

最终,EXPIRE、PEXPIRE和EXPIREAT三个命令都会转换成PEXPIREAT命令来执行,如图9-11所示

Redis 9 数据库_第1张图片

4.2

106页

你可能感兴趣的:(数据库,redis,oracle)