Redis — in-memory сховище даних. Замість запиту до бази даних під час кожного відвідування сторінки дані беруться з блискавично швидкої оперативної пам'яті.
Встановлення Redis
sudo apt update
sudo apt install -y redis-server
sudo systemctl enable redis
sudo systemctl start redis
# Перевірити роботу
redis-cli ping
# Відповідь: PONG
Налаштування Redis
sudo nano /etc/redis/redis.conf
# Обмежити пам'ять (наприклад, 256 MB):
maxmemory 256mb
maxmemory-policy allkeys-lru
# Встановити пароль:
requirepass ВашНадійнийПароль
# Слухати лише localhost (безпечно):
bind 127.0.0.1 ::1
sudo systemctl restart redis
Redis + WordPress
Встановіть плагін Redis Object Cache:
- Плагіни → Додати → «Redis Object Cache»
- Додайте в
wp-config.php:define('WP_REDIS_HOST', '127.0.0.1');define('WP_REDIS_PASSWORD', 'ВашПароль'); - Активуйте в налаштуваннях плагіна
Redis + Laravel
# .env:
CACHE_DRIVER=redis
SESSION_DRIVER=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=ВашПароль
REDIS_PORT=6379
Моніторинг Redis
redis-cli -a ВашПароль info memory
redis-cli -a ВашПароль monitor # Усі команди в реальному часі
redis-cli -a ВашПароль info stats
Основні налаштування redis.conf
# /etc/redis/redis.conf
# Прив'язка тільки до localhost (безпека!)
bind 127.0.0.1
# Пароль
requirepass YourStrongPassword123
# Максимальна пам'ять
maxmemory 256mb
maxmemory-policy allkeys-lru
# Persistent storage (RDB — періодичний знімок)
save 900 1
save 300 10
# AOF (щосекунди — баланс надійності та швидкості)
appendonly yes
appendfsync everysec
Політики витіснення пам'яті
| Політика | Поведінка | Застосування |
|---|---|---|
| allkeys-lru | Видаляти давно не використовувані | Кеш |
| volatile-lru | Видаляти тільки з TTL | Сесії + кеш |
| noeviction | Помилка при переповненні | Черги |
Часті помилки Redis
| Повідомлення | Що означає |
|---|---|
| NOAUTH Authentication required | У redis.conf заданий requirepass, але клієнт підключається без пароля або команди AUTH |
| MISCONF Redis is configured to save RDB snapshots | Диск переповнений або немає прав на запис RDB-файлу — Redis блокує запис, поки проблему не вирішено |
| OOM command not allowed when used memory > maxmemory | Досягнуто ліміт maxmemory, а політика noeviction не дозволяє звільняти місце автоматично |
| Could not connect to Redis: Connection refused | Служба не запущена, або bind обмежений іншою адресою, відмінною від тієї, куди стукається клієнт |
Redis проти Memcached: коли що обирати
| Критерій | Redis | Memcached |
|---|---|---|
| Структури даних | Рядки, списки, хеші, множини | Тільки рядки |
| Персистентність на диск | Є (RDB/AOF) | Немає, тільки пам'ять |
| Багатопотоковість | В основному однопотоковий | Багатопотоковий з коробки |
| Типове застосування | Кеш, черги, сесії | Простий кеш об'єктів |
Коли Redis не підходить
- Датасет свідомо більший за доступну оперативну пам'ять сервера, а бюджету на апгрейд немає
- Потрібен лише примітивний key-value кеш без persistence — Memcached простіший у цьому випадку і потребує менше пам'яті на службові структури
- Застосунку потрібна повноцінна реляційна модель з транзакціями і join — це завдання для PostgreSQL або MySQL, а не Redis
- Команда не готова супроводжувати ще один сервіс і моніторити його пам'ять окремо від основного застосунку
Перевірка результату
# Скільки ключів уже в базі
redis-cli -a ВашПароль dbsize
# Поточний ліміт пам'яті
redis-cli -a ВашПароль config get maxmemory
# Реально зайнята пам'ять
redis-cli -a ВашПароль info memory | grep used_memory_human
Якщо dbsize росте, а застосунок не прискорився — перевірте, що він дійсно читає з Redis, а не просто пише в нього. Детальніше про самі політики витіснення дивіться таблицю вище, а про налаштування сервера загалом — у статті про сервіси на VDS.
Оцінка потрібного обсягу пам'яті
Перш ніж виставляти maxmemory, корисно розуміти порядок цифр для свого проєкту. Одна сесія WordPress з Redis Object Cache зазвичай займає від кількох кілобайт до пари сотень кілобайт залежно від кількості запитів і плагінів. Для сайту з помірною відвідуваністю 128–256 МБ пам'яті під Redis найчастіше достатньо; інтернет-магазини з великим каталогом і активним кешем сесій можуть впертися в гігабайт і вище — це варто перевіряти командою info memory, а не підбирати навмання.
Redis як сховище черг: окрема база чи окремий інстанс
Якщо Redis уже використовується під кеш сайту, а застосунку також потрібна черга завдань (наприклад, для Laravel Queue), не варто змішувати їх в одній логічній базі Redis без поділу. Найпростіше використовувати різні номери баз даних (SELECT 0–15 за замовчуванням) для кешу і черг — це не повна ізоляція ресурсів, але дозволяє очищати кеш командою FLUSHDB, не зачіпаючи чергу завдань в іншій базі того самого інстансу.