Python 密钥过期时,set_response_callback不调用回调方法
我正在尝试获取一个回调,当密钥过期时将触发该回调,使其按我所希望的方式工作,即:Python 密钥过期时,set_response_callback不调用回调方法,python,redis,callback,Python,Redis,Callback,我正在尝试获取一个回调,当密钥过期时将触发该回调,使其按我所希望的方式工作,即: 当一个键过期时,我需要用过期的键作为参数调用回调方法 此回调必须是异步的 我的工作对象是: Ubuntu Redis 4.0.9 Python 3.6.7/redis.version=3.0.1 目前,我正在使用set\u response\u callback方法,您可以在提供的代码中看到这一点 当我使用Redis cli订阅Redis事件时,过期键会正确及时地显示: $ redis-cli --csv
- 当一个键过期时,我需要用过期的键作为参数调用回调方法李>
- 此回调必须是异步的
- Ubuntu
- Redis 4.0.9
- Python 3.6.7/redis.version=3.0.1
$ redis-cli --csv psubscribe '__key*__:expired'
Reading messages... (press Ctrl-C to quit)
"psubscribe","__key*__:expired",1
"pmessage","__key*__:expired","__keyevent@0__:expired","key"
"pmessage","__key*__:expired","__keyevent@0__:expired","key"
但当我设置回调“过期”时,如下所示:
r = redis.StrictRedis(host='localhost', port=6379, charset="utf-8", db=0)
def __key_expired(arg):
with open('test', 'a') as f:
f.write('%s' % arg)
r.set_response_callback('EXPIRE', __key_expired)
r.set('key', 'value')
r.expire('key', SECONDS_TO_EXPIRE)
( ... )
只有在调用r.expire('key',SECONDS\u TO\u expire)
且参数错误时,才会调用“\u key\u expired”回调
我希望参数是“key”,但我得到“1”
问题1:
代码中有什么错误吗?或者我使用了错误的方法/参数来使这个用例工作
问题2:
我知道,在JAVA中,可以订阅某个模式,例如
\uuuuu key*\uuuuu:expired
。我可以在Python中执行类似的操作吗?您需要使用发布/订阅连接并订阅键空间通知(在服务器上启用后),而不是使用set\u response\u callback()
set\u response\u callback()
用于覆盖redis py客户端命令的默认回调。实际的过期事件在调用回调后在Redis中异步发生。但是发布/订阅连接将需要一个python线程处于活动等待状态,不是吗?实现取决于您,但是的,这是有意义的:)