Когда ключ истекает, set_response_callback не вызывает метод обратного вызова - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь получить обратный вызов, который будет срабатывать при истечении срока действия ключа, чтобы он работал так, как я хочу, а именно:

  • Когда срок действия ключа истекает, мне нужен метод обратного вызовадля вызова с ключом с истекшим сроком в качестве аргумента;
  • Этот обратный вызов должен быть асинхронным.

Я работаю с:

  • Ubuntu
  • Redis 4.0.9
  • Python 3.6.7 / redis.version = 3.0.1

В настоящее время я использую метод 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)

( ... )

Обратный вызов "__key_expired" вызывается только тогда, когда вызывается r.expire('key', SECONDS_TO_EXPIRE) с неверным аргументом.

Я ожидаю, что аргумент будет " ключ ", но я получаю " 1 ".

Вопрос № 1 : Есть что-тонг в коде?Или, возможно, я использую неправильные методы / аргументы, чтобы этот вариант использования работал?

Вопрос № 2 : я знаю, что в JAVA можно подписаться на определенный шаблон, то естьнапример __key*__:expired.Могу ли я сделать что-то подобное в Python?

1 Ответ

0 голосов
/ 24 января 2019

Вам нужно будет использовать соединение Pub / Sub и подписаться на уведомления пространства клавиш (после включения на сервере) вместо использования set_response_callback().

set_response_callback() предназначено для переопределения обратного вызова по умолчанию дляклиентские команды redis-py.Фактическое событие истечения происходит в Redis асинхронно после вызова обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...