Установка Redis и Memcached: Руководство по кэш-слою
Установка Redis и Memcached на Ubuntu/Debian, основные команды, настройки персистентности, конфигурация TTL, сравнение Redis и Memcached, интеграция с приложениями.
Содержание
Установка Redis и Memcached: Руководство по кэш-слою
Кэш-слой — это критически важный компонент инфраструктуры, который значительно повышает производительность веб-приложений. Сохраняя запросы к базе данных, ответы API и результаты вычислений в памяти, он обеспечивает ответы за миллисекунды на повторяющиеся запросы. В этом руководстве рассматривается установка, настройка и интеграция Redis и Memcached — двух наиболее широко используемых систем кэширования.
Redis против Memcached
Обе системы предлагают высокопроизводительное хранение данных в памяти, но ориентированы на разные сценарии использования:
| Функция | Redis | Memcached |
|---|---|---|
| Структуры данных | String, Hash, List, Set, ZSet | Только String |
| Персистентность | RDB + AOF | Нет |
| Репликация | Master-Replica + Cluster | Нет |
| Pub/Sub | Да | Нет |
| Lua-скриптинг | Да | Нет |
| Многопоточность | Частичная (I/O) | Полная |
| Эффективность памяти | Средняя | Высокая |
Redis рекомендуется для новых проектов. Благодаря богатым структурам данных, персистентности и поддержке репликации он охватывает гораздо больше сценариев использования. Memcached предпочтителен только при необходимости простого строкового кэширования и максимальной многопоточной производительности.
Установка Redis (Ubuntu/Debian)
Установка из репозитория пакетов
# Обновить список пакетов
apt update
# Установить Redis
apt install -y redis-server
# Проверить статус службы
systemctl status redis-server
# Включить автозапуск
systemctl enable redis-server
Установка из официального репозитория Redis (последняя версия)
# Установить необходимые инструменты
apt install -y curl gpg
# Добавить GPG-ключ Redis
curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
# Добавить репозиторий
echo 'deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb '$(lsb_release -cs)' main' | tee /etc/apt/sources.list.d/redis.list
# Обновить и установить
apt update
apt install -y redis
Проверка версии Redis
redis-server --version
# Вывод: Redis server v=7.x.x ...
redis-cli --version
# Вывод: redis-cli 7.x.x
Установка Redis (CentOS/AlmaLinux/Rocky Linux)
# Включить репозиторий EPEL
dnf install -y epel-release
# Установить Redis
dnf install -y redis
# Запустить и включить службу
systemctl start redis
systemctl enable redis
# Проверить статус
systemctl status redis
Настройка Redis
Основной файл конфигурации
# Редактировать файл конфигурации
nano /etc/redis/redis.conf
# Адрес прослушивания (только localhost)
bind 127.0.0.1
# Порт (по умолчанию 6379)
port 6379
# Защита паролем
requirepass НадёжныйПарольRedis123!
# Максимальное использование памяти
maxmemory 512mb
# Политика вытеснения при заполнении памяти
maxmemory-policy allkeys-lru
# Запуск как демон
daemonize yes
# Файл журнала
logfile /var/log/redis/redis-server.log
# Количество баз данных
databases 16
Применение конфигурации
systemctl restart redis-server
# Проверить конфигурацию
redis-cli -a НадёжныйПарольRedis123! ping
# Вывод: PONG
Основные команды Redis
Подключение и базовые операции
# Подключиться к Redis CLI
redis-cli
# Подключиться с паролем
redis-cli -a НадёжныйПарольRedis123!
# Подключиться к удалённому серверу
redis-cli -h 192.168.1.100 -p 6379 -a пароль
# Тест подключения
PING
# Ответ: PONG
# Установить строковое значение
SET пользователь:1:имя 'Иван Иванов'
# Прочитать значение
GET пользователь:1:имя
# Установить значение с TTL (в секундах)
SETEX сессия:abc123 3600 'данные_пользователя'
# Проверить оставшееся время
TTL сессия:abc123
# Удалить значение
DEL пользователь:1:имя
# Проверить существование ключа
EXISTS пользователь:1:имя
# Список всех ключей (осторожно в продакшене)
KEYS *
# Поиск по шаблону
KEYS пользователь:*
Команды Hash
# Установить hash
HSET пользователь:1 имя 'Иван' email 'ivan@example.com' возраст 30
# Прочитать поле hash
HGET пользователь:1 имя
# Прочитать все поля hash
HGETALL пользователь:1
# Удалить поле hash
HDEL пользователь:1 возраст
# Проверить существование поля hash
HEXISTS пользователь:1 email
Команды List
# Добавить элемент в список (слева)
LPUSH задачи 'задача1' 'задача2'
# Добавить элемент в список (справа)
RPUSH задачи 'задача3'
# Получить элемент из списка (слева)
LPOP задачи
# Длина списка
LLEN задачи
# Диапазон списка
LRANGE задачи 0 -1
Команды Set и Sorted Set
# Добавить элемент в set
SADD теги 'redis' 'cache' 'nosql'
# Список членов set
SMEMBERS теги
# Добавить в sorted set с очками
ZADD таблица_лидеров 1500 'игрок1' 2300 'игрок2' 800 'игрок3'
# Список по порядку (по возрастанию)
ZRANGE таблица_лидеров 0 -1 WITHSCORES
# Список по порядку (по убыванию)
ZREVRANGE таблица_лидеров 0 2 WITHSCORES
Настройки персистентности Redis
RDB (Redis Database) Снимок
RDB записывает снимок всего набора данных на диск через определённые интервалы:
# /etc/redis/redis.conf
# Сохранить при 1 изменении за 900 секунд
save 900 1
# Сохранить при 10 изменениях за 300 секунд
save 300 10
# Сохранить при 10000 изменениях за 60 секунд
save 60 10000
# Имя файла RDB
dbfilename dump.rdb
# Директория RDB
dir /var/lib/redis
AOF (Append Only File)
AOF добавляет каждую операцию записи в файл журнала, обеспечивая более надёжную персистентность:
# Включить AOF
appendonlyfile yes
# Имя файла AOF
appendfilename 'appendonly.aof'
# Политика синхронизации
# always: При каждой записи (самая безопасная, самая медленная)
# everysec: Каждую секунду (рекомендуется)
# no: Оставить ОС (самая быстрая, наименее безопасная)
appendsync everysec
# Порог перезаписи AOF
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
В продакшене рекомендуется использовать как RDB, так и AOF. RDB обеспечивает быстрый перезапуск, а AOF минимизирует потерю данных.
Установка Memcached
Установка на Ubuntu/Debian
# Обновить список пакетов
apt update
# Установить Memcached
apt install -y memcached libmemcached-tools
# Проверить статус службы
systemctl status memcached
# Включить автозапуск
systemctl enable memcached
Установка на CentOS/AlmaLinux
# Установить Memcached
dnf install -y memcached
# Запустить и включить службу
systemctl start memcached
systemctl enable memcached
Настройка Memcached
# Редактировать файл конфигурации
nano /etc/memcached.conf
# Лимит памяти (МБ)
-m 256
# Адрес прослушивания
-l 127.0.0.1
# Порт
-p 11211
# Максимальное количество соединений
-c 1024
# Количество потоков (по количеству ядер CPU)
-t 4
# Максимальный размер объекта (байты)
-I 1m
# Перезапустить службу
systemctl restart memcached
# Проверить подключение
echo 'stats' | nc 127.0.0.1 11211
Основные команды Memcached
# Подключиться через telnet
telnet 127.0.0.1 11211
# Установить значение (ключ, флаг, TTL секунды, размер байты)
set сессия:xyz 0 3600 12
данные_пользователя
# Получить значение
get сессия:xyz
# Удалить значение
delete сессия:xyz
# Просмотр статистики
stats
# Очистить все данные
flush_all
Интеграция с приложениями
PHP с Redis
# Установить расширение PHP Redis
apt install -y php-redis
systemctl restart php8.x-fpm
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('НадёжныйПарольRedis123!');
// Записать в кэш
$redis->setex('пользователь:1', 3600, json_encode(['имя' => 'Иван', 'email' => 'ivan@example.com']));
// Прочитать из кэша
$данные = $redis->get('пользователь:1');
if ($данные) {
$пользователь = json_decode($данные, true);
} else {
// Получить из базы данных и кэшировать
$пользователь = получить_из_бд(1);
$redis->setex('пользователь:1', 3600, json_encode($пользователь));
}
Node.js с Redis
# Установить пакет ioredis
npm install ioredis
const Redis = require('ioredis');
const redis = new Redis({
host: '127.0.0.1',
port: 6379,
password: 'НадёжныйПарольRedis123!'
});
// Записать в кэш
await redis.setex('товар:42', 1800, JSON.stringify({ название: 'Ноутбук', цена: 999 }));
// Прочитать из кэша
const данные = await redis.get('товар:42');
if (данные) {
const товар = JSON.parse(данные);
console.log(товар);
}
// Очистить кэш
await redis.del('товар:42');
Python с Redis
# Установить пакет redis-py
pip install redis
import redis
import json
r = redis.Redis(
host='127.0.0.1',
port=6379,
password='НадёжныйПарольRedis123!',
decode_responses=True
)
# Записать в кэш
r.setex('статья:5', 7200, json.dumps({'заголовок': 'Руководство по Redis', 'содержание': '...'}))
# Прочитать из кэша
данные = r.get('статья:5')
if данные:
статья = json.loads(данные)
Управление службами
# Управление службой Redis
systemctl start redis-server
systemctl stop redis-server
systemctl restart redis-server
systemctl status redis-server
# Просмотр журналов Redis
journalctl -u redis-server -f
tail -f /var/log/redis/redis-server.log
# Получить информацию Redis через CLI
redis-cli INFO server
redis-cli INFO memory
redis-cli INFO stats
# Управление службой Memcached
systemctl start memcached
systemctl stop memcached
systemctl restart memcached
systemctl status memcached
Заключение
Redis и Memcached — мощные решения для кэширования, которые значительно повышают производительность приложений. Богатые структуры данных и функции персистентности Redis делают его идеальным для большинства сценариев, тогда как Memcached может быть предпочтителен для простых высокопроизводительных задач строкового кэширования. Обе системы без проблем работают на серверах REXE.
Связанные статьи
Установка MySQL и MariaDB: Руководство по базовому управлению
Пошаговая установка MySQL и MariaDB на Linux, mysql_secure_installation, создание баз данных и пользователей, основные SQL-команды, настройка удалённого доступа и оптимизация производительности.
Установка и базовое управление PostgreSQL
Установка PostgreSQL на Ubuntu/Debian и RHEL/CentOS, создание пользователей и баз данных, основные SQL-команды, настройка удалённого подключения и резервное копирование. Пошаговое руководство.
Установка phpMyAdmin и безопасный доступ
Пошаговая установка phpMyAdmin на Apache и Nginx, настройка SSL, управление пользователями, ограничение по IP и усиление безопасности.