Redis зберігає дані в пам'яті й відповідає приблизно за мілісекунду, тому він стоїть за безліччю застосунків як кеш, черга або сховище сесій. Встановлення — одна команда. Робота починається з налаштувань за замовчуванням: ліміту пам'яті немає, знімки можуть втратити останні записи, і є дві легкі помилки, які непомітно стирають дані або вимикають пароль. Ця інструкція розбирає все це на Ubuntu 24.04. Кожен крок ми пройшли на нашому образі, цифри зняті на сервері Micro (2 vCPU, 2 ГБ).
Потрібен користувач із sudo. Його створює інструкція з налаштування Ubuntu.
1. Встановлення
sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping
Встановлення тривало 13 секунд і поставило Redis 7.0.15. Він одразу запускається, стартує під час кожного завантаження, відповідає PONG і слухає лише сам сервер: 127.0.0.1:6379 і [::1]:6379, з protected-mode yes. Без даних він зайняв 13,5 МБ пам'яті.
У журналі вже було попередження:
WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.
Redis зберігає дані на диск зі своєї копії, створеної через fork, і за стандартного налаштування ядра цей fork може не спрацювати, коли пам'яті мало. Виправте один раз:
echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl -p /etc/sysctl.d/90-redis.conf
sudo systemctl restart redis-server
Після перезапуску попередження зникло.
2. Обмежте пам'ять
З коробки maxmemory дорівнює 0, тобто ліміту немає, а політика — noeviction. Redis займатиме пам'ять, доки вона на сервері не закінчиться. Задайте стелю й вирішіть, що відбувається, коли її досягнуто:
redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE
Ми перевірили обидві політики з лімітом 64 МБ і 400 000 записів:
noeviction(за замовчуванням): пам'ять зупинилася на 63 МБ, а нові записи падали з помилкоюOOM command not allowed when used memory > 'maxmemory'. Підходить для черги й усього, що не можна втрачати.allkeys-lru: Redis викинув ключі, якими давно не користувалися, 48 606 штук, і всі записи пройшли. Підходить для кешу.
CONFIG REWRITE зберігає поточні налаштування в /etc/redis/redis.conf, і вони переживають перезапуск. Ще вона додає рядок, про який треба знати до кроку 4.
3. Оберіть, як зберігати на диск
За замовчуванням Redis пише знімок (/var/lib/redis/dump.rdb) після 1 зміни за годину, 100 за п'ять хвилин або 10 000 за хвилину. Ми перевірили три способи його зупинити:
| Як зупинився Redis | Лише знімки (за замовчуванням) | З журналом AOF |
|---|---|---|
systemctl restart | Нічого не втрачено: під час зупинки він зберігається | Нічого не втрачено |
Вбитий через kill -9 | Ключ, записаний після останнього знімка, зник | Ключ, записаний за 2 секунди до kill, на місці |
В обох випадках systemd сам підняв Redis за кілька секунд.
Якщо в Redis лежать дані, яких буде шкода, увімкніть журнал AOF (append-only file). Він записує кожну операцію й скидає її на диск раз на секунду. Робіть це на працюючому сервері, а не правкою файлу:
redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_
Спершу ми спробували інший шлях, і він коштував нам даних. Ми змінили appendonly no на appendonly yes у redis.conf і перезапустили. Redis піднявся з порожнім AOF і нічого не завантажив зі знімка, тож усі попередні ключі зникли. А під час наступної зупинки він записав свій новий вміст, уже без старих ключів, ще й поверх dump.rdb. CONFIG SET цього уникає: Redis спершу пише AOF із даних у пам'яті. Після перезапуску всі наші ключі були на місці.
Якщо Redis — чистий кеш, якому не страшно стартувати порожнім, зробіть навпаки й вимкніть збереження: redis-cli CONFIG SET save "".
4. Поставте пароль
Ось друга пастка. Після будь-якого CONFIG REWRITE Redis 7 додає в кінець redis.conf такий рядок:
user default on nopass ~* &* +@all
Він означає «користувачеві за замовчуванням пароль не потрібен». Потім ми додали requirepass вище у файлі й перезапустили. Redis і далі відповідав PONG без пароля, бо рядок user його перекриває. Задавайте пароль через сам Redis:
REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE
Збережіть пароль у надійному місці. Тепер Redis зберігає його хешем SHA-256 у тому самому рядку user default. Після перезапуску redis-cli ping відповів NOAUTH Authentication required., і працював лише пароль. Передавайте його в redis-cli через змінну REDISCLI_AUTH. З ключем -a він видимий у списку процесів, і redis-cli про це попереджає. У застосунку вкажіть його в адресі Redis: redis://:PASSWORD@127.0.0.1:6379/0.
5. Підключення зі свого комп'ютера
Залиште Redis на 127.0.0.1 і користуйтеся SSH-тунелем. Вкажіть SSH-порт вашого сервера; на тарифах із NAT це ваш персональний порт:
ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22
Поки тунель відкритий, redis-cli -p 6380 і програми на вашому комп'ютері працюють із Redis на сервері. В інтернет при цьому нічого нового не відкрито. З інструкцією щодо SSH-ключів тунель входитиме без пароля.
Наскільки він швидкий
На тестовому сервері Micro redis-benchmark із 50 клієнтами показав:
| Тест | Запитів на секунду | Медіанна затримка |
|---|---|---|
| SET | 30 303 | 1,0 мс |
| GET | 35 149 | 0,9 мс |
| SET, 16 команд за один обмін | 272 109 | 2,4 мс |
| GET, 16 команд за один обмін | 414 938 | 1,3 мс |
Для кешу або черги завдань вебзастосунку це набагато більше, ніж знадобиться. Додаткова швидкість береться з надсилання команд пачками (pipelining).
Який тариф обрати
Redis потрібна пам'ять під ваші дані й майже нічого більше. Nano (2 vCPU, 1 ГБ, $3/міс) тримає Redis поруч із невеликим застосунком при maxmemory 256mb. Micro (2 ГБ, $5/міс) залишає місце під більший кеш і сам застосунок. Якщо до Redis має напряму підключатися хтось іще, візьміть власний IPv4 (з Nano-IP за $8/міс) і дозвольте у файрволі лише цю адресу. Усі тарифи — на сторінці VPS, оплата в USDT, USDC або ETH у мережах Base, Ethereum або Polygon.
Коментарі
Поки немає коментарів. Будьте першим.