Установка, настройка, оптимизация хранилища Redis
Redis — NoSQL хранилище типа "ключ/значение", является хранилищем данных в памяти, обычно используется в качестве базы данных, кэша и брокера сообщений. Поддерживаются различные структуры данных, такие как строки, хэши, списки, наборы.
Преимущества:
- высокая скорость;
- GitHub, Weibo, Pinterest, Snapchat, Craigslist, Digg, StackOverflow, Flickr выбрали это хранилище;
- поддерживается практически всеми языками программирования, в том числе JavaScript, Java, Go, C, C++, C#, Python, Objective-C, PHP;
- имеет открытый исходный код.
Redis легко устанавливается Как установить Redis в Docker.
Как проверить работу redis
Чтобы проверить, что Redis работает, воспользуйтесь командной строкой Redis. Для доступа к командной строке используйте команду redis-cli.
redis-cli
Примечание: Если вы уже установили пароль для Redis, авторизуйтесь после установки соединения с помощью auth.
auth your_redis_password
Ответ: OK
Проверьте соединение с сервером с помощью команды ping:
Если Redis работает правильно, вы увидите ответ: PONG
Как найти логи redis
Место хранения логов настраивается в конфигурационном файле redis.conf (/etc/redis/redis.conf).
Откройте этот файл:
sudo nano /etc/redis/redis.conf
Найдите строку logfile:
logfile /var/log/redis/redis-server.log
Чтобы изменить имя лог-файла или выбрать другой каталог для его хранения, отредактируйте путь.
Если логи не находятся в указанных выше каталогах, попробуйте найти файлы при помощи команды find в каталоге /var/logs.
find /var/log/* -name *redis*
Как очистить кеш redis
Самый простой способ очистить кеш Redis - использовать команду redis-cli. Базы данных в Redis хранятся индивидуально. Использование команды redis-cli позволяет удалить ключи либо из всех баз данных, либо только из одной указанной базы данных.
redis-cli [номер базы данных] [опция]
Где: [опция] - позволяет выбрать между очисткой всех баз данных или одной конкретной базы данных по вашему выбору. [номер базы данных] - позволяет указать, какую базу данных вы хотите очистить.
Чтобы удалить ключи из всех баз данных Redis, используйте следующую команду:
redis-cli flushall
Начиная с версии 4.0.0, Redis может очищать ключи в фоновом режиме, не блокируя ваш сервер. Для этого используйте команду flushall с параметром async:
redis-cli flushall async
FAQ 1: Redis Can't save in background: fork: Cannot allocate memory
Краткий ответ:
echo 1 > /proc/sys/vm/overcommit_memory
И тоже самое, если хотите, чтобы изменение сохранилось и после перезагрузки сервера, добавьте строку в /etc/sysctl.conf:
vm.overcommit_memory = 1
И перечитайте конфиг:
# sysctl -p
Расширенный ответ из Redis FAQ.
Схема фонового сохранения Redis основана на семантике копирования при записи системного вызова fork в современных операционных системах: Redis разветвляется (создает дочерний процесс), который является точной копией родителя. Дочерний процесс сбрасывает БД на диск и, наконец, завершает работу. Теоретически дочерний процесс должен использовать столько же памяти, сколько и родитель, являющийся копией, но на самом деле благодаря семантике копирования при записи, реализованной в большинстве современных операционных систем, родительский и дочерний процессы будут совместно использовать общие страницы памяти. Страница будет дублироваться только при ее изменении в дочерней или родительской. Поскольку теоретически все страницы могут изменяться во время сохранения дочерним процессом, Linux не может заранее сказать, сколько памяти займет дочерний процесс, поэтому, если для параметра overcommit_memory установлено значение 0, fork не удастся, если не будет столько свободной оперативной памяти. как требуется, чтобы действительно дублировать все родительские страницы памяти. Если у вас есть набор данных Redis размером 3 ГБ и всего 2 ГБ свободной памяти, произойдет сбой.
Установка overcommit_memory в 1 говорит Linux расслабиться и выполнить форк более оптимистичным
способом распределения.


