Під час виконання певних операцій з обмеженням часу нам потрібен зворотний зв'язок щодо результатів. Наприклад, замовлення автоматично видаляються після закінчення терміну дії, замовлення автоматично хваляться через кілька днів, неоплачені замовлення закриваються через 15 хвилин тощо, що можна виконати за допомогою деяких фреймворків завдань із обмеженням часу або методів опитування. У цій статті використовується розширений механізм сповіщення про події закінчення кешу функцій Redis у поєднанні з кодом .NET/C# для виконання бізнес-вимог.
Введення
Сценарії використання: 1. У платіжному бізнесі неоплачені замовлення автоматично закриваються 2. Нагадування про закінчення терміну дії кешу
Загалом, ми можемо використовувати сервіс таймінгу для обробки автоматичного закриття неоплачених замовлень, наприклад, щохвилини дзвонити інтерфейсу для обробки неоплачених і прострочених замовлень, але в цьому випадку це споживатиме комп'ютерну продуктивність, навіть якщо замовлення немає, воно оброблятиметься щохвилини, а максимальна затримка часу обробки замовлень становитиме 59 секунд, і сервіс таймінгу має бути завжди доступним
Отже, що ми хочемо робити лише тоді, коли є неоплачені та прострочені замовлення з низькою затримкою, ми можемо використати механізм закінчення кешу Redis, щоб просувати підписку?
Підписка на Redis
Змініть Ex події notify-keyspace-events у конфігураційному файлі redis.conf
Для збереження ресурсів чашок сповіщення про події за замовчуванням не вмикаються, а за замовчуванням є notify-keyspace-events
# Сповіщення про простір клавіш K, <db>з префіксом __keyspace@__ # Повідомлення про подію клавіші E, <db>з префіксом __keysevent@__ # g del, expipre, rename та інші типи загальних команд, ... # $string командування # I List команди #s Встановити команду # h Команда хешу # z наказав встановити команду # x Подія закінчення (генерується щоразу, коли ключ закінчується) # Подія виселення (генерується, коли ключ очищено, коли пам'ять заповнена) # Псевдонім 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 теж є ненадійною системою сповіщень, якщо нашому бізнесу потрібна хороша надійність, то це не найкращий вибір. Зазвичай ми рекомендуємо RabbitMQ DLX (Dead-Letter-Exchange) для реалізації — функції відкладеної черги. Просто рішення Redis простіше впроваджувати і дешевше в експлуатації. Це все ще дуже зручно для бізнесу, який не потребує високої надійності. |