我正在尝试获取一个回调,该回调将在密钥过期时触发,以便按我希望的方式工作,即:
我正在使用:
目前,我正在使用 set_response_callback 方法,如您在提供的代码中所见。
当我订阅Redis事件时,使用 redis-cli ,可以正确并及时显示到期密钥:
$ 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"
但是当我设置回调'EXPIRE'时,如下所示:
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_TO_EXPIRE)
且参数错误时才调用“ __key_expired”回调。
我希望参数为“ 键”,但得到“ 1 ”。
问题#1 : 代码有问题吗?还是我使用错误的方法/参数来使此用例正常工作?
问题2 :
我知道在JAVA中可以订阅某个模式,例如__key*__:expired
。我可以在Python中做类似的事情吗?
答案 0 :(得分:0)
您需要使用发布/订阅连接并订阅键空间通知(在服务器上启用后),而不要使用set_response_callback()
。
set_response_callback()
用于覆盖redis-py客户端命令的默认回调。实际的到期事件在调用回调之后在Redis中异步发生。