• 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    注意
    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    def PEXPIRE(key,ttl_in ms)# 获取以毫秒计算的当前UNIX时间戳
    	now_ms= get_current_unix_timestamp_in_ms()
    
    	#当前时间加上TTL,得出毫秒格式的键过期时间
    	PEXPIREAT(keynow_ms+ttl_in_ms)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    并且,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)
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    在这里插入图片描述

    4.2

    106页

  • 相关阅读:
    dm关键字提示报错
    CSS :has伪类
    FRED应用:真实玻片设置
    Bean的生命周期
    JVM之运行时数据区 PC、虚拟机栈、本地方法栈
    Python 用Ursina引擎制作一个3D迷宫游戏
    Leetcode-338. 比特位计数
    Spring5架构,万字文章带你学习
    Pthread 并发编程(三)——深入理解线程取消机制
    oracle19c-安装软件误删恢复
  • 原文地址:https://blog.csdn.net/kking_edc/article/details/134481498