redis 如何查询过期key

fiy 其他 283

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Redis 提供了用于查询过期 key 的命令——TTL 和 PTTL。

    1. TTL 命令:TTL(key) 的作用是获取指定 key 的剩余过期时间,返回值为秒数。
      • 若 key 不存在或已过期,返回 -2;
      • 若 key 存在并且没有设置过期时间,返回 -1;
      • 其他情况下,返回 key 的剩余过期时间。

    示例:

    127.0.0.1:6379> SET mykey "value" EX 300
    OK
    127.0.0.1:6379> TTL mykey
    (integer) 298
    127.0.0.1:6379> TTL nonexistingkey
    (integer) -2
    127.0.0.1:6379> SET anotherkey "value"
    OK
    127.0.0.1:6379> TTL anotherkey
    (integer) -1
    
    1. PTTL 命令:PTTL(key) 的作用与 TTL 相似,只是返回值为毫秒数。用法和返回值与 TTL 一致。

    示例:

    127.0.0.1:6379> SET mykey "value" PX 300000
    OK
    127.0.0.1:6379> PTTL mykey
    (integer) 298040
    127.0.0.1:6379> PTTL nonexistingkey
    (integer) -2
    127.0.0.1:6379> SET anotherkey "value"
    OK
    127.0.0.1:6379> PTTL anotherkey
    (integer) -1
    

    通过使用 TTL 或 PTTL 命令,可以查询指定 key 的过期时间,并判断 key 是否已过期。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Redis 中查询过期的 key,可以使用以下几种方式:

    1. 使用 TTL 命令,该命令可以查看指定 key 的存活时间,单位为秒。当 key 不存在或已过期时,返回 -2;当 key 存在但没有设置过期时间时,返回 -1
    > TTL key
    (integer) 100
    
    1. 使用 PTTL 命令,该命令可以查看指定 key 的存活时间,单位为毫秒。与 TTL 命令类似,当 key 不存在或已过期时,返回 -2;当 key 存在但没有设置过期时间时,返回 -1
    > PTTL key
    (integer) 100000
    
    1. 使用 KEYS 命令,该命令可以列出所有的 key,然后再使用 TTL 命令判断每个 key 的过期时间。
    > KEYS *
    1) "key1"
    2) "key2"
    3) "key3"
    > TTL key1
    (integer) 100
    > TTL key2
    (integer) -2
    > TTL key3
    (integer) 50
    

    需要注意的是,KEYS 命令会阻塞 Redis 服务器的其他操作,且在大规模部署中不适合使用。可以考虑使用 SCAN 命令进行迭代遍历 key。

    1. 使用 SCAN 命令,该命令可以迭代遍历数据库中的 key,通过指定游标和匹配模式来获取符合条件的 key。
    > SCAN 0 MATCH key*
    1) "12"
    2) 1) "key1"
       2) "key2"
       3) "key3"
    

    此命令可通过多次迭代 SCAN 命令来获取所有匹配的 key。然后再使用 TTL 命令判断每个 key 的过期时间。

    1. 使用 Redis 的 Pub/Sub 订阅/发布功能来监听 key 过期事件。可以使用 PSUBSCRIBE 命令订阅 __keyevent@*__:expired 通配符模式,一旦有 key 过期事件发生,就会通过消息发送给订阅者。
    > PSUBSCRIBE __keyevent@*__:expired
    Reading messages... (press Ctrl-C to quit)
    1) "pmessage"
    2) "__keyevent@0__:expired"
    3) "__keyevent@0__:expired"
    4) "key1"
    5) ""
    

    通过这种方式可以实时获取 key 的过期事件,但需要注意在使用时合理控制订阅和退订的时机,避免资源浪费。

    以上是 Redis 查询过期 key 的几种方式,可以根据具体需求选择合适的方法。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    查询 Redis 中的过期键可以使用 TTL 命令或者 PTTL 命令。TTL 命令用以查询键的剩余过期时间(以秒为单位),而 PTTL 命令则以毫秒为单位返回剩余过期时间。以下是在 Redis 中查询过期键的方法和操作流程。

    1. 使用 TTL 命令查询过期键

    TTL 命令用来查询 Redis 键的剩余过期时间,它可以用于查询任意类型的键。

    操作流程如下:

    1. 连接 Redis 客户端。
    2. 使用 TTL key 命令来查询键 key 的剩余过期时间,其中 key 是要查询的键名。
    3. 根据返回的结果,如果键不存在或者键没有设置过期时间,则返回 -1;如果键已经过期,则返回 -2;否则,返回键的剩余过期时间。

    例如,查询键名为 mykey 的键的剩余过期时间:

    TTL mykey
    
    1. 使用 PTTL 命令查询过期键

    PTTL 命令的用法和 TTL 命令相同,区别在于 PTTL 命令返回的是以毫秒为单位的剩余过期时间。

    操作流程如下:

    1. 连接 Redis 客户端。
    2. 使用 PTTL key 命令来查询键 key 的剩余过期时间,其中 key 是要查询的键名。
    3. 根据返回的结果,如果键不存在或者键没有设置过期时间,则返回 -1;如果键已经过期,则返回 -2;否则,返回键的剩余过期时间(以毫秒为单位)。

    例如,查询键名为 mykey 的键的剩余过期时间:

    PTTL mykey
    

    综上所述,使用 TTL 命令或 PTTL 命令可以查询 Redis 中的过期键。根据返回的结果判断键是否过期,可以方便地进行相关操作。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部