共计 2041 个字符,预计需要花费 6 分钟才能阅读完成。
这篇“Redis 怎么设置生存和过期时间”文章的知识点大部分人都不太理解,所以丸趣 TV 小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Redis 怎么设置生存和过期时间”文章吧。
在了解原理前 先来看使用方法
通过 EXPIRE 命令或者 PEXPIRE 命令,客户端可以以秒或者毫秒精度为数据库中的某个键设置生存时间,在经过指定的秒数或者毫秒数之后,服务器就会自动删除生存时间为 0 的键。
SETEX 命令可以在设置一个字符串键的同时为键设置过期时间(只能用于字符串键)
与 EXPIRE 命令和 PEXPIRE 命令类似,客户端可以通过 EXPIREAT 命令或 PEXPIREAT 命令,以秒或者毫秒精度给数据库中的某个键设置过期时间
过期时间是一个 UNIX 时间戳,当键的过期时间来临时,服务器就会自动从数据库中删除这个键
TTL 命令和 PTTL 命令接受一个带有生存时间或者过期时间的键,返回这个键的剩余生存时间,也就是,返回距离这个键被服务器自动删除还有多长时间
Redis 有四个不同的命令可以用于设置键的生存时间(键可以存在多久)或过期时间(键什么时候会被删除):
EXPIRE
PEXPIRE
EXPIREAT
PEXPIREAT
原理
虽然有多种不同单位和不同形式的设置命令,但实际上 EXPIRE、PEXPIRE、EXPIREAT 三个命令都是使用 PEXPIREAT 命令来实现的:
无论客户端执行的是以上四个命令中的哪一个,经过转换之后,最终的执行效果都和执行 PEXPIREAT 命令一样。
redisDb 结构的 expires 字典保存了数据库中所有键的过期时间,我们称这个字典为过期字典
过期字典的键是一个指针,这个指针指向键空间中的某个键对象(也即是某个数据库键)。
过期字典的值是一个 long long 类型的整数,这个整数保存了键所指向的数据库键的过期时间——一个毫秒精度的 UNIX 时间戳。
下图展示了一个带有过期字典的数据库例子,在这个例子中,键空间保存了数据库中的所有键值对,而过期字典则保存了数据库键的过期时间。
为了展示方便,图中的键空间和过期字典中重复出现了两次 alphabet 键对象和 book 键对象。在实际中,键空间的键和过期字典的键都指向同一个键对象,所以不会出现任何重复对象,也不会浪费任何空间。
图中的过期字典保存了两个键值对:
第一个键值对的键为 alphabet 键对象,值为 1385877600000,这表示数据库键 alphabet 的过期时间为 1385877600000(2013 年 12 月 1 日零时)。
第二个键值对的键为 book 键对象,值为 1388556000000,这表示数据库键 book 的过期时间为 1388556000000(2014 年 1 月 1 日零时)。当客户端执行 PEXPIREAT 命令(或者其他三个会转换成 PEXPIREAT 命令的命令)为一个数据库键设置过期时间时,服务器会在数据库的过期字典中关联给定的数据库键和过期时间。
在服务器执行以下命令之后
过期字典将新增一个键值对,其中键为 message 键对象,而值则为 1391234400000(2014 年 2 月 1 日零时),如图
以下是 PEXPIREAT 命令的伪代码定义
PERSIST 命令可以移除一个键的过期时间
PERSIST 命令就是 PEXPIREAT 命令的反操作:PERSIST 命令在过期字典中查找给定的键,并解除键和值(过期时间)在过期字典中的关联。
过期键的判定
通过过期字典,程序可以用以下步骤检查一个给定键是否过期:
1)检查给定键是否存在于过期字典:如果存在,那么取得键的过期时间。
2)检查当前 UNIX 时间戳是否大于键的过期时间:如果是的话,那么键已经过期;否则的话,键未过期。可以用伪代码来描述这一过程:
对于一个过期时间为 1385877600000(2013 年 12 月 1 日零时)的键 alphabet 来说:
如果当前时间为 1383282000000(2013 年 11 月 1 日零时),那么调用 is_expired(alphabet)将返回 False,因为当前时间小于 alphabet 键的过期时间。
另一方面,如果当前时间为 1385964000000(2013 年 12 月 2 日零时),那么调用 is_expired(alphabet)将返回 True,因为当前时间大于 alphabet 键的过期时间。
以上就是关于“Redis 怎么设置生存和过期时间”这篇文章的内容,相信大家都有了一定的了解,希望丸趣 TV 小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注丸趣 TV 行业资讯频道。