【问题标题】: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 events
gb.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 程序是否经过优化,但“当它正常运行时,请勿触摸它”:)