BGREWRITEAOF
Тема дорожной карты · Redis
BGREWRITEAOF — команда Redis, запускающая фоновую перезапись AOF (Append-Only File) путём генерации минимальной последовательности команд Redis, необходимой для восстановления текущего состояния данных в памяти. Во время выполнения BGREWRITEAOF Redis создаёт дочерний процесс для записи нового AOF-файла, пока родительский процесс продолжает обслуживать запросы; новые команды записи буферизуются и добавляются в новый AOF после завершения перезаписи. Перезапись уменьшает размер AOF-файла за счёт устранения избыточных операций — например, заменяя последовательность вызовов INCR одной командой SET с итоговым значением. BGREWRITEAOF запускается автоматически, когда AOF-файл превышает пороги auto-aof-rewrite-percentage и auto-aof-rewrite-min-size, заданные в redis.conf. Периодический запуск BGREWRITEAOF поддерживает компактность AOF-файла и сокращает время перезапуска Redis после сбоя.
Как это работает
BGREWRITEAOF имеет два механизма. RDB (save 900 1 ...) — snapshot всего датасета на диск периодически: компактно, быстро грузится, но теряет всё с последнего snapshot при крэше. AOF (appendonly yes) логирует каждую запись в файл, реплеит при рестарте: durable, с тюнингом fsync (always/everysec/no). Можно гонять оба; AOF — для durability, RDB — для быстрого рестарта. Современный Redis (7+) имеет hybrid AOF (RDB-префикс + AOF-хвост).
Когда применять
Для чистого кеша — RDB-only ок, потеря последних минут допустима. Для всего остального — AOF с appendfsync everysec, потеря последней секунды — обычный компромисс. Реплика, периодически делающая BGSAVE для offline бекапов (коррумпированный AOF на primary не должен быть единственным артефактом). Тестируйте restore с RDB/AOF до того, как понадобится.
Типичные ошибки
Ловушки BGREWRITEAOF: appendfsync always убивает throughput; "у нас AOF, мы в безопасности" (OOM при fork() может коррумпировать AOF — храните off-host бекап); AOF растёт без границ (включите auto-aof-rewrite-percentage); не тестируете restore (день, когда понадобится, — худший день узнать, что AOF битый).