For the complete documentation index, see llms.txt. This page is also available as Markdown.

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 и почему база стала слишком большой.

Подключение к серверу по SSH

Что нельзя делать сразу

Не выполняйте эти команды без диагностики:

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:

Файлы сайта в FastPanel

Также можно посмотреть информацию приложения:

Если используются очереди:

или:

Redis нельзя чистить грубо через FLUSHALL.

Если используется Horizon:

Подключение к серверу по SSH

Как безопасно чистить 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:

Подключение к серверу по SSH

Для PHP-FPM сначала найдите сервис:

Примеры:

или для FastPanel PHP 8.4:

Короткий чек-лист

  1. Проверить Redis:

  1. Проверить память и базы:

  1. Проверить размер файлов:

  1. Найти большие или массовые ключи:

  1. Не делать:

  1. Удалять только понятные старые cache-ключи через:

  1. После очистки выполнить:

  1. Исправить приложение, чтобы такие ключи больше не копились.


Частые ошибки

Redis долго грузится после каждого рестарта

Скорее всего, в Redis слишком много данных.

Проверьте:

Найдите массовые ключи и проверьте TTL.

Redis показывает LOADING и не отвечает на PING

Это может быть нормальным, если загрузка ещё идёт.

Проверьте:

Если loading_loaded_perc растёт, дождитесь завершения.

Redis падает при загрузке

Проверьте память и системные логи:

После очистки Redis снова растёт

Значит причина не устранена в приложении.

Нужно найти код или модуль, который создаёт ключи без TTL или не удаляет старые поколения cache.

Можно ли просто удалить dump.rdb

Без понимания содержимого — нет.

Так можно потерять важные данные Redis.

Сначала нужно понять, что хранится в Redis: только cache или также очереди, locks, сессии и runtime-данные.


Главная мысль

Ошибка: LOADING Redis is loading the dataset in memory часто является не самой проблемой, а симптомом.

Redis вынужден долго загружаться, потому что хранит слишком большой набор данных.

Правильное решение — не перезапускать Redis много раз подряд, а понять, какие ключи раздувают базу, удалить только безопасный мусор и исправить приложение, которое создаёт эти ключи без TTL или без ограничения хранения.

Последнее обновление

Это было полезно?