При выполнении определённых операций по времени нам нужна обратная связь о результатах. Например, заказы автоматически удаляются после истечения срока, заказы автоматически хвалятся через несколько дней, неоплаченные заказы закрываются через 15 минут и так далее, что можно выполнить с помощью некоторых временных фреймворков задач или методов опросов. В этой статье используется расширенный механизм уведомления о событиях истечения кэша функций Redis в сочетании с кодом .NET/C# для выполнения бизнес-требований.
Знакомство
Сценарии использования: 1. В платежном бизнесе неоплаченные заказы автоматически закрываются 2. Напоминания о истечении срока действия кэша
В целом, сервис тайминга можно использовать для обработки автоматического закрытия неоплаченных заказов, например, каждую минуту вызывая интерфейс для обработки неоплаченных и просроченных заказов, но в этом случае это будет понижать производительность компьютера, даже если заказа нет, он будет обрабатываться каждую минуту, максимальная задержка времени обработки заказа составит 59 секунд, и сервис тайминга должен быть всегда доступен
Так что же мы хотим делать только при неоплаченных и просроченных заказах с низкой задержкой обработки? Мы можем использовать механизм истечения кэша Redis, чтобы продвинуть подписку?
Подписка на Redis
Измените события Ex с notify-keyspace-событиями в конфигурационном файле redis.conf
Для сохранения ресурсов кубков уведомления о событиях по умолчанию не включаются, а по умолчанию — notify-keyspace-events
# Уведомление о пространстве клавиш K, <db>с префиксом __keyspace@__ # Уведомление о событии клавиши E, <db>с префиксом __keysevent@__ # g del, expipre, переименование и другие типы универсальных команд, ... # $string командование # I List команды #s Задать команду # h Команда хэша # z приказал установить команду # x Событие истечения (генерируется каждый раз, когда ключ истекает) # e e-событие выселения (генерируется при очистке ключа при заполнении памяти) # Псевдоним g$lshzxe, значит «AKE» означает все события
Notify-keyspace-events «KX» означает, что вы хотите отслеживать события невалидации ключа. Установка параметра в строку AKE означает отправку всех типов уведомлений.
Я установил redis как сервис на своём компьютере, изменил конфигурационный файл redis.windows.conf и пришлось перезапустить конфигурацию сервиса Redis, чтобы она вступила в силу.
Пример кода .NET/C#
Пакет выглядит следующим образом:
взывать
Давайте попробуем написать кэш с помощью redis-cli.
На самом деле, вы также можете подписаться на уведомления о истечении срока действия кэша, выполнив следующую команду через redis-cli:
Когда N клиентов подписываются на уведомления о событии истечения кэша, redis уведомляет N пользователей об одном и том же сообщении, а не только одному из клиентов, как показано на рисунке ниже:
Скачать исходный код на C#:
https://down.itsvse.com/item/17856.html
сводка
Redis pub/sub — это ненадёжный механизм сообщений, он не хранит информацию, пересылает только онлайн, и уж точно нет механизма подтверждения ACK, а пересылается только сегмент подписки, поэтому Keyspace Notifications тоже ненадёжная система уведомлений, если нашему бизнесу нужна хорошая надежность, то это не лучший выбор. В целом мы рекомендуем использовать DLX (Dead-Letter-Exchange) от RabbitMQ для реализации — функцию задержки очереди. Просто решение Redis проще в реализации и дешевле в эксплуатации. Это всё равно очень удобно для бизнеса, которым не требуется высокая надёжность. |