Как обновить данные в Redis и MySQL одновременно?

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

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

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

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

2 ответа

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

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

Вы можете попробовать плагин mysql udf ( https://github.com/Ideonella-sakaiensis/lib_mysqludf_redis)

Смотрите пост: как перенести данные из mysql в redis

Другие вопросы по тегам