Я пытаюсь получить обратный вызов, который будет срабатывать при истечении срока действия ключа, чтобы он работал так, как я хочу, а именно:
- Когда срок действия ключа истекает, мне нужен метод обратного вызовадля вызова с ключом с истекшим сроком в качестве аргумента;
- Этот обратный вызов должен быть асинхронным.
Я работаю с:
- 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?