LOADING Redis is loading the dataset in memory
Ошибка: LOADING Redis is loading the dataset in memory
означает, что Redis уже запустился, но ещё загружает данные с диска в оперативную память.
Пока загрузка не закончилась, сайт или панель управления могут временно получать ошибку Redis.
Чаще всего это происходит после:
перезагрузки сервера;
рестарта Redis;
восстановления данных из
dump.rdb;восстановления данных из AOF;
слишком большого объёма данных в Redis.
Это не всегда поломка.
Если Redis загрузился за несколько секунд и ошибка исчезла — это нормальная ситуация.
Но если Redis грузится долго или после каждого рестарта сайт долго не работает, нужно проверить, что именно хранится в Redis и почему база стала слишком большой.
Что нельзя делать сразу
Не выполняйте эти команды без диагностики:
FLUSHALL
FLUSHDB
rm -f /var/lib/redis/dump.rdb
rm -rf /var/lib/redis
systemctl restart redis-server много раз подрядRedis может хранить не только cache.
В нём могут быть:
очереди;
Horizon;
locks;
rate limits;
сессии;
временные данные приложения;
runtime-данные модулей.
Если очистить Redis полностью, можно потерять важные рабочие данные.
Проверка статуса Redis
Сначала проверьте статус сервиса:
Если сервис называется иначе, найдите его:
Проверьте ответ Redis:
Нормальный ответ:
Если Redis ещё загружается, вместо PONG может вернуться ошибка LOADING.
Проверка процесса загрузки
Чтобы понять, Redis ещё загружается или уже готов, выполните:
Если Redis ещё загружается, можно увидеть:
Это означает:
loading:1— загрузка ещё идёт;loading_loaded_perc— процент загрузки;loading_eta_seconds— примерное время до завершения.
Если процент растёт, лучше дождаться окончания загрузки.
Когда Redis готов, будет:
Проверка логов Redis
Проверьте последние логи Redis:
В логах обращайте внимание на строки:
Что это может означать:
Не хватает оперативной памяти.
Закончилось место на диске.
Возможно, повреждён файл Redis.
Redis успешно загрузился и готов принимать подключения.
Проверка RAM, диска и размера Redis
Проверьте оперативную память:
Проверьте диск:
Проверьте размер Redis-файлов:
Также проверьте память Redis:
И количество ключей:
Важно смотреть не только RAM сервера, но и объём данных, который Redis реально хранит.
Как понять, что хранится в Redis
Посмотрите базы Redis:
Пример:
В этом примере во второй базе очень много ключей, но почти нет ключей с истечением срока.
Это значит, что в Redis могли накопиться постоянные ключи без TTL.
Это частая причина долгой загрузки Redis.
Просмотр примеров ключей
Посмотреть примеры ключей в базе 0:
Посмотреть примеры ключей в базе 1:
Найти самые тяжёлые ключи:
Если команда --memkeys недоступна, используйте:
Проверка TTL у подозрительных ключей
Сначала найдите ключи по шаблону.
Например:
Проверьте TTL и размер нескольких ключей:
Если TTL равен:
значит ключ никогда не истекает.
Если таких ключей тысячи или сотни тысяч, Redis будет постоянно расти и долго загружаться после рестарта.
Проверка Redis в Laravel
Для Laravel-проектов сначала проверьте .env:
Также можно посмотреть информацию приложения:
Если используются очереди:
или:
Redis нельзя чистить грубо через FLUSHALL.
Если используется Horizon:
Как безопасно чистить Redis
Правильный подход — удалять только понятные мусорные cache-ключи.
Сначала посчитайте, сколько ключей подходит под шаблон:
Посмотрите примеры:
Если вы уверены, что это старый cache, удаляйте через UNLINK.
Рекомендуется использовать UNLINK, а не DEL.
UNLINK освобождает память асинхронно и меньше блокирует Redis.
После очистки проверьте память и ключи:
Пример: старые snapshot-ключи
Частая проблема — cache создаёт версионные snapshot-ключи и не удаляет старые поколения.
Пример:
Правильная логика — хранить только последние несколько поколений.
Например, последние 3.
Сначала сделайте проверку без удаления:
Если число ожидаемое, можно удалить старые ключи:
После этого обязательно исправьте генератор cache в приложении.
Иначе Redis снова вырастет.
Пересоздание RDB-файла после очистки
После удаления лишних ключей пересоздайте RDB-файл:
Проверьте статус сохранения:
Проверьте размер Redis-файлов:
После успешного BGSAVE следующий старт Redis обычно будет быстрее, потому что файл dump.rdb станет меньше.
Если не хватает оперативной памяти
Признаки проблемы:
Проверьте системные логи:
Проверьте память:
Временно можно добавить swap:
Важно: swap не решает основную причину.
Если Redis хранит гигабайты cache из-за ошибки приложения, нужно чистить мусорные ключи и исправлять логику cache.
Если повреждён RDB или AOF
Сначала сделайте backup:
Проверьте RDB:
Проверьте, включён ли AOF:
Если включён AOF, найдите файлы:
Проверка AOF:
Для Redis 7 путь может отличаться, если используется appendonlydir.
Команды с --fix используйте только после backup.
Настройка maxmemory
Не ставьте allkeys-lru на общий Redis, где живут очереди.
Плохой вариант для общего Redis:
Почему это опасно:
Redis может удалить ключи очередей, Horizon, locks или другие важные runtime-данные.
Лучше разделять Redis по назначению:
Если Redis один общий, безопаснее использовать:
Но это только ограничитель.
Главная задача — убрать мусорные ключи и исправить приложение, которое создаёт cache без TTL или без очистки старых данных.
Рекомендуемая системная настройка
Для Redis рекомендуется включить vm.overcommit_memory = 1.
Выполните:
Это снижает риск проблем при BGSAVE и fork-процессах Redis.
После работ с Redis
После очистки или восстановления Redis перезапустите связанные процессы приложения.
Для Laravel/Horizon:
Для PHP-FPM сначала найдите сервис:
Примеры:
или для FastPanel PHP 8.4:
Короткий чек-лист
Проверить Redis:
Проверить память и базы:
Проверить размер файлов:
Найти большие или массовые ключи:
Не делать:
Удалять только понятные старые cache-ключи через:
После очистки выполнить:
Исправить приложение, чтобы такие ключи больше не копились.
Частые ошибки
Redis долго грузится после каждого рестарта
Скорее всего, в Redis слишком много данных.
Проверьте:
Найдите массовые ключи и проверьте TTL.
Redis показывает LOADING и не отвечает на PING
Это может быть нормальным, если загрузка ещё идёт.
Проверьте:
Если loading_loaded_perc растёт, дождитесь завершения.
После очистки Redis снова растёт
Значит причина не устранена в приложении.
Нужно найти код или модуль, который создаёт ключи без TTL или не удаляет старые поколения cache.
Можно ли просто удалить dump.rdb
Без понимания содержимого — нет.
Так можно потерять важные данные Redis.
Сначала нужно понять, что хранится в Redis: только cache или также очереди, locks, сессии и runtime-данные.
Главная мысль
Ошибка: LOADING Redis is loading the dataset in memory часто является не самой проблемой, а симптомом.
Redis вынужден долго загружаться, потому что хранит слишком большой набор данных.
Правильное решение — не перезапускать Redis много раз подряд, а понять, какие ключи раздувают базу, удалить только безопасный мусор и исправить приложение, которое создаёт эти ключи без TTL или без ограничения хранения.
Последнее обновление
Это было полезно?