Установка, настройка, оптимизация хранилища Redis
Redis — NoSQL хранилище типа "ключ/значение", является хранилищем данных в памяти, обычно используется в качестве базы данных, кэша и брокера сообщений. Поддерживаются различные структуры данных, такие как строки, хэши, списки, наборы.
Преимущества:
- высокая скорость;
- GitHub, Weibo, Pinterest, Snapchat, Craigslist, Digg, StackOverflow, Flickr выбрали это хранилище;
- поддерживается практически всеми языками программирования, в том числе JavaScript, Java, Go, C, C++, C#, Python, Objective-C, PHP;
- имеет открытый исходный код.
Установка Redis
Redis легко устанавливается Как установить Redis в Docker.
В Ubuntu 22 для установки Redis выполните нижеприведенную команду, вторая команда включает поддержку Redis в PHP:
apt install redis apt install php8.1-redis
Как проверить работу redis
Чтобы проверить, что Redis работает, воспользуйтесь командной строкой Redis. Для доступа к командной строке используйте команду redis-cli.
redis-cli
Примечание: Если вы уже установили пароль для Redis, авторизуйтесь после установки соединения с помощью auth.
auth your_redis_password
Ответ: OK
Проверьте соединение с сервером с помощью команды ping:
Если Redis работает правильно, вы увидите ответ: PONG
Настройка и анализ Redis
Вывести полностью информацию о сервер 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
- used_memory_human сообщает общее количество памяти, занятой сервисом Redis для хранения данных. Из-за фрагментации памяти это значение будет отличаться от объема памяти, выделенной для Redis операционной системой.
- used_memory_peak_human показывает максимальное значение памяти, занимаемой Redis.
Для исключения свопинга нужно следить, чтобы объем памяти, выделенной для Redis, не превышал общий объем памяти, доступной на сервере.
Метрика connected_clients показывает количество клиентов, подключенных к Redis. Если клиентов слишком много, возможны проблемы с обработкой запросов. Параметр maxclients в файле конфигурации Redis /etc/redis/redis.conf задает максимально допустимое количество клиентов. По умолчанию это количество равно 10000, но в зависимости от конфигурации ОС, например, от ограничений на количество открытых файлов, может потребоваться уменьшить значение параметра maxclients.
redis-cli INFO | grep connected_clients
Как найти логи 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
Время жизни TTL объекта в базе данных Redis
По умолчанию объект не ограничен временем жизни, поэтому 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).
- Под "установленным временем жизни" понимается, что эти ключи будут автоматически удалены из базы данных Redis по истечении заданного временного интервала.
ttl (time-to-live):
- Для конкретного ключа ttl показывает, сколько времени (в секундах) осталось до его автоматического удаления.
- Если к ключу применен TTL, эта команда вернет количество секунд, оставшихся до истечения срока действия ключа. Если ключу не установлен TTL, Redis вернет значение, указывающее на это (обычно -1 или -2, в зависимости от ситуации).
Оба параметра помогают контролировать и управлять временем жизни данных в вашей базе данных Redis. Использование TTL полезно для кэширования данных, автоматического удаления временной информации и поддержания эффективности работы базы данных путем удаления старых или ненужных данных.
Настройка и использование команды AUTH в Redis
Redis хранит данные в памяти и может быть очень быстрым. Однако, если к вашему серверу Redis может подключиться любой, это создает серьезный риск безопасности. AUTH позволяет установить простой пароль, который должен быть предоставлен при подключении к серверу, чтобы обеспечить, что только уполномоченные пользователи могут выполнять команды. Начиная с Redis 6, поддерживается концепция пользователей и ACL (Access Control Lists). Это позволяет создавать разные учетные записи с различными уровнями доступа к командам и ключам. Каждый пользователь может иметь свой собственный пароль и набор разрешений.
Команда AUTH очень проста в использовании. Если вы установили пароль для вашего сервера Redis в конфигурационном файле (через директиву requirepass), вы должны отправить этот пароль с помощью команды AUTH, когда подключаетесь к серверу.
redis-cli AUTH ваш_пароль redis-cli -h localhost -a ваш_пароль info
Настройте Redis для использования пароля:
- Откройте конфигурационный файл Redis (redis.conf).
- Найдите строку, содержащую # requirepass foobared.
- Удалите символ # (это комментарий) и замените foobared на ваш собственный пароль.
- Сохраните файл и перезапустите 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()); } ?>
В этом примере:
- Мы создаем новый экземпляр клиента Redis.
- Подключаемся к серверу Redis по адресу 127.0.0.1 и порту 6379.
- Выполняем аутентификацию с помощью метода auth, передавая пароль, который вы установили в конфигурации Redis.
- Если аутентификация проходит успешно, можно выполнить любую команду, в примере мы устанавливаем и получаем значение ключа testKey.
Убедитесь, что расширение phpredis установлено и настроено для использования в вашем проекте на PHP.
Репликация данных в Redis: управление репликами и клиентами
Одна из наиболее востребованных функций в Redis – поддержка репликации: любой сервер Redis может копировать свои данные на любое количество реплик, что обеспечивает высокую масштабируемость при чтении и высокую избыточность данных. Кроме того, Redis изначально разработан для поддержки большого количества клиентов (по умолчанию до 10000). Клиенты могут подключаться и взаимодействовать с данными, что делает Redis хорошим вариантом для тех случаев, в которых многим пользователям необходим доступ к одному и тому же набору данных.
Redis поддерживает два типа распределения данных – replication (mirroring, дублирование данных) и sharding (partitioning, сегментирование).
Как подключить Redis в CMS WordPress?
Для подключения Redis к CMS WordPress, вам необходимо выполнить следующие шаги:
- Установка Redis на Сервер: Сначала убедитесь, что Redis установлен на вашем сервере. Если вы используете общий хостинг, уточните у вашего провайдера, доступен ли Redis.
- Установка PHP расширения для Redis: Установите PHP расширение для Redis на ваш сервер. Это можно сделать через командную строку, используя команду apt install php-redis (для Debian/Ubuntu) или аналогичную в вашей системе.
apt install php-redis
- Установка и активация плагина в WordPress: В WordPress установите плагин, который поддерживает кэширование через Redis, например: Redis Object Cache, W3 Total Cache или платный Object Cache Pro.
Настройка плагина Redis Object Cache
Согласно документации на 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.
- wp redis status Shows the object cache status and diagnostics
- wp redis enable Enables the object cache
- wp redis disable Disables the object cache
- wp redis update-dropin Updates the object cache drop-in
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 расслабиться и выполнить форк более оптимистичным способом распределения.
Заключение или Выбор между Redis и Memcached
Redis и Memcached — популярные хранилища данных в памяти с открытым исходным кодом. Несмотря на то, что они просты в использовании и обладают высокой производительностью, существуют важные различия, которые необходимо учитывать при выборе движка. Memcached отличает простота, а Redis обладает широкими функциональными возможностями, которые позволяют эффективно использовать хранилище для разнообразных целей. Определите свои требования и характеристики движков, чтобы решить, какое решение лучше соответствует вашим потребностям.
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах