2015-02-04 2 views
1

Скажите, что я установил резервную копию Redis с моментальным снимком каждые несколько минут и не повезло при запуске моментального снимка, транзакция (использование конвейера) находится в процессе. Как Редис справляется с этой ситуацией? Будет ли снимок задерживаться до завершения транзакции? Или сохранить первую часть транзакции? Или исключить всю транзакцию до следующей резервной копии?Что делать, если Redis запускает моментальный снимок в середине транзакции?

ответ

1

Имейте в виду, что Redis представляет собой однопоточный цикл событий. Операция выполняется атомарно, когда выполняется команда EXEC. Таким образом, либо процесс сохранения фона RDB разветвляется перед EXEC, либо после EXEC. Вы можете подумать, что вилка мгновенно делает снимок памяти Редиса.

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

На боковой ноте, за исключением случаев, когда ваша база данных крошечная, делать свалку каждые несколько минут, вероятно, слишком тяжело. Возможно, вам стоит подумать об использовании файла append-only.