首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当密钥过期时,set_response_callback不会调用回调方法。

当密钥过期时,set_response_callback不会调用回调方法。
EN

Stack Overflow用户
提问于 2019-01-24 11:08:16
回答 1查看 787关注 0票数 2

我正在尝试得到一个回调(当密钥过期时会触发该回调),以便按我的意愿工作,即:

  • 当密钥过期时,我需要用过期的键作为参数调用回调方法;
  • 此回调必须是异步的。

我的工作是:

  • Ubuntu
  • Redis 4.0.9
  • Python3.6.7/ redis.version = 3.0.1

目前,我正在使用set_response_callback方法,正如您在提供的代码中所看到的那样。

当我使用 Redis -cli订阅redis事件时,过期键将正确和及时地显示:

代码语言:javascript
复制
$ 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"

但是,当我设置回调“过期”时,如下所示:

代码语言:javascript
复制
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做类似的事吗?

EN

回答 1

Stack Overflow用户

发布于 2019-01-24 12:51:17

您需要使用Pub/Sub连接并订阅密钥空间通知(在服务器上启用之后),而不是使用set_response_callback()

set_response_callback()用于重写redis-py客户端命令的默认回调。在调用回调之后,Redis中将异步发生实际的失效事件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54345221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档