Redis държи данните в паметта и отговаря за около милисекунда, затова стои зад толкова много приложения като кеш, опашка или хранилище за сесии. Инсталирането е една команда. Работата е в настройките по подразбиране: няма лимит на паметта, моментните снимки могат да изгубят последните записи, а две лесни грешки тихо изтриват данните ви или изключват паролата ви. Това ръководство разглежда всичко на Ubuntu 24.04. Минахме всяка стъпка на нашия образ; числата са от сървър Micro (2 vCPU, 2 GB).
Нужен ви е потребител със 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 MB RAM.
В лога вече имаше предупреждение:
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 ще заема RAM, докато на сървъра не свърши. Задайте таван и решете какво става, когато бъде достигнат:
redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE
Изпробвахме двете политики с лимит 64 MB и 400 000 записа:
noeviction(по подразбиране): паметта спря на 63 MB, а новите записи се проваляха с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 секунди преди това, беше на мястото си |
И в двата случая 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 ms |
| GET | 35 149 | 0,9 ms |
| SET, 16 команди за едно отиване и връщане | 272 109 | 2,4 ms |
| GET, 16 команди за едно отиване и връщане | 414 938 | 1,3 ms |
За кеша или опашката със задачи на уеб приложение това е много повече, отколкото ще ви трябва. Допълнителната скорост идва от изпращането на команди на пакети (pipelining).
Кой план
На Redis му трябва RAM за данните ви и малко друго. Nano (2 vCPU, 1 GB, $3/месец) движи Redis до малко приложение с maxmemory 256mb. Micro (2 GB, $5/месец) оставя място за по-голям кеш и самото приложение. Ако нещо друго трябва да се свързва директно с Redis, вземете собствен IPv4 (от Nano-IP за $8/месец) и разрешете във защитната стена само този адрес. Всички планове са на страницата VPS, а плащането е в USDT, USDC или ETH в мрежите Base, Ethereum или Polygon.
Коментари
Още няма коментари. Бъди първият.