Фактическое хранилище данных и кэш должны быть синхронизированы путем помещения данных в MQ и использования потребителя для обновления redis.
Когда вы добавляете данные в определенное хранилище (то есть в базу данных SQL), вам необходимо поместить эти данные в некоторую служебную шину или очередь сообщений и позволить некоторой асинхронной службе выполнить полную синхронизацию, используя некоторый фоновый процесс.
Вы не хотите входить в эти случаи (когда не используется служебная шина и асинхронный сервис):
- Делайте ваши запросы или процессы медленнее, потому что пользователь должен ждать
пока данные не будут сохранены в вашей базе данных и кэше.
- Есть риск сбоя во время процесса кэширования и невозможности
иметь политику повторных попыток (которая обычно является встроенной функцией в
служебная шина или несколько очередей сообщений).
Кроме того, этот сбой может привести к частичному или полному повреждению кэша, и вы не сможете автоматически и легко запланировать какую-либо задачу для исправления этой ситуации.
Об использовании истечения срока действия ключа Redis - это хорошая идея. Поскольку Redis может использовать ключи с истекшим сроком действия с помощью встроенного механизма, вам не следует реализовывать срок действия ключей из всего фонового процесса. Если ключ существует, потому что он все еще действителен.
Кстати, вы не всегда будете в этом случае (если срок действия ключа не истек, это означает, что его не следует перезаписывать). Это может зависеть от вашего фактического домена.
Надеюсь, это поможет.