2017-02-13 119 views
2

Я создаю фоновое обслуживание, которое сводится к очень сложной системе очередей. Идея состоит в том, чтобы использовать Redis как непостоянное хранилище и иметь схему sub/pub, которая работает с интервалом.Как обновлять данные в Redis и MySQL одновременно?

Все подписчики будут за балансировщиком нагрузки. Это устраняет сложную проблему сохранения состояния между всеми серверами за балансировщиком нагрузки.

Но это вводит новую проблему ... как я могу гарантировать, что не-постоянные (Redis) и постоянные (MySQL) базы данных обновляются моими приложениями?

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

ответ

0

Есть два возможных решения вашей проблемы:

  1. следующие действия:
    а. Запустить транзакцию MySQL с помощью START TRANSACTION
    b. Запустите запрос MySQL INSERT INTO ...
    c. Запустите команду Redis
    d. Завершите свою транзакцию MySQL оператором COMMIT в случае, если команда Redis выполнена успешно или ROLLBACK, если команда не выполнена
    Использование transctions гарантирует согласованность данных в обоих хранилищах.
  2. Напишите LUA скрипт для Redis с использованием библиотеки LuaSQL (https://realtimelogic.com/ba/doc/en/lua/luasql.html), где вы будете подключаться к MySQL, вставлять свои данные и затем отправлять команды Redis. Затем этот LUA скрипт может быть вызван из стороны клиента с помощью одной команды EVAL или EVALSHA

 Смежные вопросы

  • Нет связанных вопросов^_^