Прямо сейчас мы строим Chatbot для нашей компании, которая будет работать как API без гражданства, где она дает ответ на основе сообщения пользователя. Для управления разговорами чата, рабочий процесс, сеанс и все остальные вещи, которые мы создали приложение, используя Ракетный чат Отказ Таким образом, API, которые мы являемся зданием, в основном принимают пользовательский ввод, затем использование экстрактов NLP намерения и объекты, используя те, которые оно создает ответное сообщение. Мы использовали Redis для поддержания пользовательского контекста.
Так что все хорошо Но мы хотим сохранить пользовательский контекст в базе данных, а не удерживать его в Redis, чтобы мы могли загрузить пользовательский контекст в Redis при необходимости от базы данных. ToDo Это требование, сделало биты исследований и узнали, что мы можем слушать ключевые события истечения срока действия событий в Redis, но есть небольшая проблема, что она скажет, какой ключ истек, но не даст вам свою ценность, и вы не можете получить значение, потому что ключ уже истек. Тогда Этот ответ пришел, чтобы спасти меня в этой ситуации.
Позвольте мне показать вам, как я реализовал.
Во-первых, нам нужно сделать небольшое изменение в Config redis, чтобы включить уведомления об испуске по умолчанию, его отключено для сохранения питания CPU. Для этого у нас есть 2 подхода
- Запустите ниже команду
redis-cli config настроек notify-keyspace-события Бывший
- Обновите файл Config Redis и перезапустите его. Если вы используете Ubuntu, как я, скорее всего, вы найдете файл Config redis на “/etc/redis/redis.conf” Отказ Откройте файл конфигурации и обновите
Notify-keyspace-события ""
к
Notify-keyspace-события Бывший
Я взял 2-й подход кстати. Если вы хотите узнать больше об этой настройке, прочитайте здесь Отказ Теперь наш Redis готов к излучению ключевых событий истекает события, поэтому нам нужно написать код, слушай их.
Сначала давайте установим Redis Package.
pip3 install redis
У нас есть эта проблема «событие скажет вам, какой ключ истек, но он не даст вам его значение, и вы не можете получить значение, потому что ключ уже истек.»
Чтобы решить эту проблему, что мы сделаем, это всякий раз, когда мы создаем ключ и ценность с этим, мы также создадим ключ теневой клавиши, и мы получим время истечения ключей И когда мы получаем уведомление о сроке Shadow Key, мы получим исходный ключ и значение и удалите исходный ключ от Redis. Ура, наша проблема решена.
Этот код поможет вам с этим
Теперь запустите файл Python
python3 redis-key-expire-listener.py
В настоящее время Чтобы проверить его открытым Redis-CLI
$ redis-cli
Давайте установим наш ключ и ценность
127.0.0.1:6379> SET testkey 100 OK
Тогда давайте создадим ключ тени с истечением 10 секунд
127.0.0.1:6379> SET shadowKey:testkey "" EX 10 OK
Если вы видите терминал, в котором мы запустим наш код слушателя, вы получите этот вывод через 10 секунд, когда нажата тень истекший
Handler {'type': 'pmessage', 'pattern': b' __keyevent@0__ :expired', 'channel': b' __keyevent@0__ :expired', 'data': b'shadowKey:testkey'} Got Value: b'100'
Поздравляю!!! Ваш слушатель ключа Redis истекает готов.
Мир. Счастливое кодирование.
Оригинал: “https://dev.to/tankala/how-to-write-your-own-redis-key-expire-listener-in-python-ldk”