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