我正在尝试得到一个回调(当密钥过期时会触发该回调),以便按我的意愿工作,即:
我的工作是:
目前,我正在使用set_response_callback方法,正如您在提供的代码中所看到的那样。
当我使用 Redis -cli订阅redis事件时,过期键将正确和及时地显示:
$ 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)
( ... )"__key_expired“回调只在调用r.expire('key', SECONDS_TO_EXPIRE)时使用错误的参数调用。
我希望这个参数是"key“,但是我得到了"1”。
问题#1:代码中有什么问题吗?或者我使用了错误的方法/参数来使这个用例起作用?
问题2:我知道在JAVA中可以订阅某种模式,例如__key*__:expired。我能用Python做类似的事吗?
发布于 2019-01-24 12:51:17
您需要使用Pub/Sub连接并订阅密钥空间通知(在服务器上启用之后),而不是使用set_response_callback()。
set_response_callback()用于重写redis-py客户端命令的默认回调。在调用回调之后,Redis中将异步发生实际的失效事件。
https://stackoverflow.com/questions/54345221
复制相似问题