14人参与 • 2025-04-23 • Redis
在 redis 中,我们可以为键(key)设置过期时间,以确保当指定的时间到达后,该键会自动被删除。
这种机制对于需要临时存储数据的应用场景非常有用,例如缓存、会话管理等。
redis 提供了多种命令用于设置或修改键的过期时间。以下是一些常用的命令:
a. expire key seconds
功能:为指定的键设置过期时间,单位是秒。
返回值:
1
。0
。示例:
redis> expire mykey 60 (integer) 1
此命令设置键 mykey
在 60 秒后过期。
b. pxpire key milliseconds
功能:为指定的键设置以毫秒为单位的过期时间。
返回值:
1
。0
。示例:
redis> pxpire mykey 5000 (integer) 1
此命令设置键 mykey
在 5000 毫秒(即 5 秒)后过期。
c. expireat key timestamp
功能:为指定的键设置一个具体的过期时间,使用 unix 时间戳(从 epoch 开始计算的秒数)。
返回值:
1
。0
。示例:
redis> expireat mykey 1623859200 (integer) 1
此命令设置键 mykey
在 unix 时间戳 1623859200
(即 2021 年 6 月 14 日 00:00:00 utc)过期。
d. pexpireat key timestamp milliseconds
功能:与 expireat
类似,但时间戳使用毫秒精度。
返回值:
1
。0
。示例:
redis> pexpireat mykey 1623859200000 (integer) 1
此命令设置键 mykey
在 unix 时间戳 1623859200000
(即 2021 年 6 月 14 日 00:00:00 utc,毫秒精度)过期。
e. 使用 set
命令设置过期时间
set
命令支持在设置键值的同时指定过期时间。ex
(以秒为单位)或 px
(以毫秒为单位)来实现这一点。示例:
redis> set mykey "hello" ex 60 ok redis> set mykey2 "world" px 5000 ok
mykey
的值为 "hello"
,并在 60 秒后过期。mykey2
的值为 "world"
,并在 5000 毫秒(即 5 秒)后过期。a. ttl key
功能:返回指定键的剩余生存时间(以秒为单位)。
返回值:
-2
。-1
。示例:
redis> set mykey "test" ex 60 ok redis> ttl mykey (integer) 58 redis> ttl nonexistkey (integer) -2 redis> ttl noexpirekey (integer) -1
b. pttl key
功能:与 ttl
类似,但返回的是以毫秒为单位的剩余生存时间。
返回值:
-2
。-1
。示例:
redis> set mykey "test" px 5000 ok redis> pttl mykey (integer) 4837
c. 修改 ttl
expire
, pxpire
, expireat
, 或 pexpireat
命令重新设置过期时间,从而修改键的剩余生存时间。示例:
redis> set mykey "test" ex 60 ok redis> ttl mykey (integer) 58 redis> expire mykey 30 (integer) 1 redis> ttl mykey (integer) 29
redis 使用两种策略来处理过期的键:
a. 惰性删除(lazy deletion)
b. 积极删除(active deletion)
在需要为多个键设置过期时间时,可以使用 redis 的 multi
和 exec
命令将多个命令打包执行,从而实现原子性操作。
示例:
redis> multi ok redis> expire key1 60 queued redis> expire key2 30 queued redis> exec 1) ok 2) ok
px
和 pexpireat
命令时,时间以毫秒为单位,可以提供更高的精度。expireat
和 pexpireat
时,需要确保提供的 unix 时间戳是正确的,并且与当前的系统时间一致。通过上述命令和策略,可以在 redis 中灵活地设置、获取和修改键的生存时间(ttl)。这不仅有助于管理内存资源,还能提高应用的性能和稳定性。
在实际应用中,应根据具体的业务需求选择合适的过期时间和策略,以实现最佳的效果。
相关链接:
通过以上内容,您可以全面了解如何在 redis 中设置和管理键的生存时间。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论