Синхронизировать таблицу SQL с Azure Redis Cache - PullRequest
0 голосов
/ 12 июня 2019

Я только начал работать с Redis Cache и стал более четко понимать его концепции и функции.

Моя цель - кэшировать несколько таблиц базы данных сервера sql. Немногие приложения C # часто обновляют эти таблицы, и немногие читают эти таблицы. Вместо того, чтобы обслуживать каждый запрос из базы данных, я хочу обработать запрос из кэша (чтение данных из кэша, CRUD будет происходить напрямую только в базе данных). Чтобы поддержать этот сценарий, один из подходов,

  1. Кэшировать все таблицы, используя Redis Cache.
  2. Подать заявку на получение запроса из этого кэша.
  3. Как и когда любое приложение обновляет любую таблицу, обновляйте мой кэшируйте соответственно и предоставьте читателю свежую копию из кэша.

Вышеуказанный подход довольно прост с несколькими проблемами (которыми я могу управлять).

По моему опыту, должен быть какой-то механизм для автоматической синхронизации таблицы базы данных с кэшем Redis, чтобы мне не приходилось обновлять кэш из разных приложений.

Есть ли какие-либо материалы по этому вопросу?

1 Ответ

0 голосов
/ 27 июня 2019

Фактическое хранилище данных и кэш должны быть синхронизированы путем помещения данных в MQ и использования потребителя для обновления redis.

Когда вы добавляете данные в определенное хранилище (то есть в базу данных SQL), вам необходимо поместить эти данные в некоторую служебную шину или очередь сообщений и позволить некоторой асинхронной службе выполнить полную синхронизацию, используя некоторый фоновый процесс.

Вы не хотите входить в эти случаи (когда не используется служебная шина и асинхронный сервис):

  • Делайте ваши запросы или процессы медленнее, потому что пользователь должен ждать пока данные не будут сохранены в вашей базе данных и кэше.
  • Есть риск сбоя во время процесса кэширования и невозможности иметь политику повторных попыток (которая обычно является встроенной функцией в служебная шина или несколько очередей сообщений).

Кроме того, этот сбой может привести к частичному или полному повреждению кэша, и вы не сможете автоматически и легко запланировать какую-либо задачу для исправления этой ситуации.

Об использовании истечения срока действия ключа Redis - это хорошая идея. Поскольку Redis может использовать ключи с истекшим сроком действия с помощью встроенного механизма, вам не следует реализовывать срок действия ключей из всего фонового процесса. Если ключ существует, потому что он все еще действителен.

Кстати, вы не всегда будете в этом случае (если срок действия ключа не истек, это означает, что его не следует перезаписывать). Это может зависеть от вашего фактического домена.

Надеюсь, это поможет.

...