【问题标题】:How to check if redis key is expired or not in python3如何在python3中检查redis密钥是否过期
【发布时间】:2020-06-10 04:15:29
【问题描述】:

我最近遇到了 redis 的问题。 我使用 redis.setex 设置了一个密钥,然后我想在密钥过期后打印一些东西。 我的意思是:

redis.setex('Hi',2,'Hello')
if redis.ttl <= 0:
    print('done') 

但它不会工作。 不能使用睡眠或循环,因为程序还有其他部分要运行(它是一个电报机器人)。 如果有人帮助我,我将不胜感激。 抱歉英语不好

【问题讨论】:

标签: python python-3.x redis


【解决方案1】:

选项 1:检查密钥是否存在

如果密钥已过期,则该密钥不再存在于数据库中。 这意味着,我知道这很明显,如果密钥在这里,它还没有过期;)

因此您可以运行命令EXISTS 或检索密钥。

选项 2:使用密钥空间通知

您可以做的是,您可以让数据库在密钥过期/删除时发布事件。我邀请您查看文档的这一部分: * KeySpace Notifications

所以一旦事件发生,Redis 就会在通道上发布一个事件,然后你可以使用你的 Python 并订阅它

选项 3:使用 Redis Gears 和 Key Spaces 通知

Redis 社区有一个新模块“Redis Gears”也可以帮助您。它与选项 2 非常相似,最大的不同是:

  • 你听key eventsgb.register(prefix='*', eventTypes=['expired']) 的方式
  • 您可以将事件推送到 Redis Streams、发布事件甚至在 Python 中处理它。

希望我对您有所帮助,您会发现这些选项之一对您的应用程序有用

【讨论】:

    【解决方案2】:

    好吧,我没有使用这些选项,但我发现了 threading Timer! 使用:

    def something():
        .... #call another function to run
    threading.Timer(redis.ttl(key),something).start()
    

    问题解决了。 idk 程序是否经过优化,但“当它正常运行时,请勿触摸它”:)

    【讨论】:

      猜你喜欢
      • 2020-08-19
      • 2011-02-22
      • 2016-05-14
      • 1970-01-01
      • 2015-09-01
      • 2017-05-04
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多