Redis — NoSQL хранилище типа "ключ/значение", является хранилищем данных в памяти, обычно используется в качестве базы данных, кэша и брокера сообщений. Поддерживаются различные структуры данных, такие как строки, хэши, списки, наборы.
Преимущества:
Redis легко устанавливается Как установить Redis в Docker.
В Ubuntu 22 для установки Redis выполните нижеприведенную команду, вторая команда включает поддержку Redis в PHP:
apt install redis apt install php8.1-redis
Чтобы проверить, что Redis работает, воспользуйтесь командной строкой Redis. Для доступа к командной строке используйте команду redis-cli.
redis-cli
Примечание: Если вы уже установили пароль для Redis, авторизуйтесь после установки соединения с помощью auth.
auth your_redis_password
Ответ: OK
Проверьте соединение с сервером с помощью команды ping:
Если Redis работает правильно, вы увидите ответ: PONG
Вывести полностью информацию о сервер Redis или для конкретного блока:
redis-cli info redis-cli info stats
Вывести все базы и количество ключей в них
redis-cli INFO keyspace # Keyspace db0:keys=6871,expires=51,avg_ttl=351286990
Посмотреть объем памяти, выделенной для Redis:
redis-cli INFO memory | grep used_memory used_memory:871696 used_memory_human:851.27K used_memory_rss:11415552 used_memory_rss_human:10.89M used_memory_peak:933904 used_memory_peak_human:912.02K used_memory_peak_perc:93.34% used_memory_overhead:809688 used_memory_startup:809688 used_memory_dataset:62008 used_memory_dataset_perc:100.00% used_memory_lua:41984 used_memory_lua_human:41.00K used_memory_scripts:0 used_memory_scripts_human:0B
Для исключения свопинга нужно следить, чтобы объем памяти, выделенной для Redis, не превышал общий объем памяти, доступной на сервере.
Метрика connected_clients показывает количество клиентов, подключенных к Redis. Если клиентов слишком много, возможны проблемы с обработкой запросов. Параметр maxclients в файле конфигурации Redis /etc/redis/redis.conf задает максимально допустимое количество клиентов. По умолчанию это количество равно 10000, но в зависимости от конфигурации ОС, например, от ограничений на количество открытых файлов, может потребоваться уменьшить значение параметра maxclients.
redis-cli INFO | grep connected_clients
Место хранения логов настраивается в конфигурационном файле 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-cli. Базы данных в Redis хранятся индивидуально. Использование команды redis-cli позволяет удалить ключи либо из всех баз данных, либо только из одной указанной базы данных.
redis-cli [номер базы данных] [опция]
Где: [опция] - позволяет выбрать между очисткой всех баз данных или одной конкретной базы данных по вашему выбору. [номер базы данных] - позволяет указать, какую базу данных вы хотите очистить.
Чтобы удалить ключи из всех баз данных Redis, используйте следующую команду:
redis-cli flushall
Начиная с версии 4.0.0, Redis может очищать ключи в фоновом режиме, не блокируя ваш сервер. Для этого используйте команду flushall с параметром async:
redis-cli flushall async
По умолчанию объект не ограничен временем жизни, поэтому TTL возвращает -1, после установки значения командой EXPIRE команда TTL уже возвращает оставшееся количество секунд.
redis 127.0.0.1:6379> ttl test:1:string (integer) -1 redis 127.0.0.1:6379> expire test:1:string 6000 (integer) 1 redis 127.0.0.1:6379> ttl test:1:string (integer) 5997
Параметры expires и ttl в Redis играют ключевую роль в механизме управления временем жизни ключей. Вот как они функционируют:
expires:
ttl (time-to-live):
Оба параметра помогают контролировать и управлять временем жизни данных в вашей базе данных Redis. Использование TTL полезно для кэширования данных, автоматического удаления временной информации и поддержания эффективности работы базы данных путем удаления старых или ненужных данных.
Redis хранит данные в памяти и может быть очень быстрым. Однако, если к вашему серверу Redis может подключиться любой, это создает серьезный риск безопасности. AUTH позволяет установить простой пароль, который должен быть предоставлен при подключении к серверу, чтобы обеспечить, что только уполномоченные пользователи могут выполнять команды. Начиная с Redis 6, поддерживается концепция пользователей и ACL (Access Control Lists). Это позволяет создавать разные учетные записи с различными уровнями доступа к командам и ключам. Каждый пользователь может иметь свой собственный пароль и набор разрешений.
Команда AUTH очень проста в использовании. Если вы установили пароль для вашего сервера Redis в конфигурационном файле (через директиву requirepass), вы должны отправить этот пароль с помощью команды AUTH, когда подключаетесь к серверу.
redis-cli AUTH ваш_пароль redis-cli -h localhost -a ваш_пароль info
Настройте Redis для использования пароля:
Пример использования команды AUTH в PHP:
Для использования Redis с авторизацией в PHP, вы можете использовать расширение phpredis. Вот пример кода, демонстрирующего, как подключиться к серверу Redis и выполнить команду с использованием аутентификации:
<?php // Подключение к Redis $redis = new Redis(); // Попытка подключения try { $redis->connect('127.0.0.1', 6379); // подключение к серверу Redis $redis->auth('ваш_пароль'); // аутентификация с паролем // После аутентификации вы можете использовать команды Redis $redis->set('testKey', 'Hello Redis'); echo "Значение testKey: " . $redis->get('testKey') . PHP_EOL; } catch (RedisException $e) { die($e->getMessage()); } ?>
В этом примере:
Убедитесь, что расширение phpredis установлено и настроено для использования в вашем проекте на PHP.
Одна из наиболее востребованных функций в Redis – поддержка репликации: любой сервер Redis может копировать свои данные на любое количество реплик, что обеспечивает высокую масштабируемость при чтении и высокую избыточность данных. Кроме того, Redis изначально разработан для поддержки большого количества клиентов (по умолчанию до 10000). Клиенты могут подключаться и взаимодействовать с данными, что делает Redis хорошим вариантом для тех случаев, в которых многим пользователям необходим доступ к одному и тому же набору данных.
Redis поддерживает два типа распределения данных – replication (mirroring, дублирование данных) и sharding (partitioning, сегментирование).
Для подключения Redis к CMS WordPress, вам необходимо выполнить следующие шаги:
apt install php-redis
Согласно документации на github плагин Redis Object Cache поддерживает Predis, PhpRedis, Relay, репликацию, сентинелы, кластеризацию и WP-CLI.
Открываем файл wp-config.php и прописываем следующие строки в его начало:
<?php define('WP_REDIS_SCHEME', 'unix'); define('WP_REDIS_PATH', '/var/www/example/.system/redis/socket'); define('WP_CACHE_KEY_SALT', 'prefix');
Вместо prefix в параметре WP_CACHE_KEY_SALT подставьте уникальный префикс для хранения данных в Redis, что важно при использовании Redis для нескольких сайтов.
Redis Object Cache имеет различные команды WP-CLI. Для получения дополнительной информации запустите wp help redis.
Краткий ответ:
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 расслабиться и выполнить форк более оптимистичным способом распределения.
Redis и Memcached — популярные хранилища данных в памяти с открытым исходным кодом. Несмотря на то, что они просты в использовании и обладают высокой производительностью, существуют важные различия, которые необходимо учитывать при выборе движка. Memcached отличает простота, а Redis обладает широкими функциональными возможностями, которые позволяют эффективно использовать хранилище для разнообразных целей. Определите свои требования и характеристики движков, чтобы решить, какое решение лучше соответствует вашим потребностям.