Установка, настройка и работа с Redis на Ubuntu (и в Docker)
Redis — высокопроизводительное key-value хранилище в памяти. Чаще всего используется для кэша, сессий, очередей и счётчиков. Разберём установку на Ubuntu и в Docker, оптимизацию ядра, сетевой доступ, аутентификацию и подключение из PHP/Python.
Актуальная версия Redis — 8.10.2 (сентябрь 2026).
Установка, начальная настройка и запуск
Операционная система Ubuntu
apt-get update
apt-get install redis-server
vi /etc/redis/redis.conf
Меняем директиву:
supervised systemd
Позволяет запускать Redis как службу под управлением systemd — даёт больше контроля над БД.
systemctl enable redis-server
systemctl restart redis-server
redis-server --version
Redis server v=8.10.2 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 ...
Docker
Требуется установленный Docker.
docker pull redis
docker run --name redis-server -d redis
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8c30431268c redis "docke…" 4 sec… Up 3… 6379/tcp redis-server
Сервис на порту 6379; обращаться можно по имени redis-server или ID.
Оптимизация
- Linux может отказать Redis в выделении памяти при создании снимка БД (fork), если считает, что RAM недостаточно:
echo "vm.overcommit_memory = 1" > /etc/sysctl.d/99-overcommit_memory.conf
- Поднимаем максимальное число открытых сокетов в очереди:
echo "net.core.somaxconn = 65535" > /etc/sysctl.d/99-somaxconn.conf
sysctl --system
Проверка работы
Установка на систему:
redis-cli
Контейнер:
docker exec -it redis-server redis-cli
127.0.0.1:6379>
> ping
PONG
> set test_key "A test value"
> get test_key
"A test value"
> KEYS *
> quit
Полный список команд — в документации Redis.
Доступ по сети
По умолчанию Redis принимает только локальные подключения.
Установка на систему
vi /etc/redis/redis.conf
Находим:
bind 127.0.0.1 ::1
Добавляем адрес интерфейса:
bind 127.0.0.1 ::1 192.168.0.15
где 192.168.0.15 — адрес сервера.
systemctl restart redis-server
ss -tunlp | grep :6379
Docker
Пробрасываем порт:
docker container stop redis-server && docker container rm -v redis-server
docker run --name redis-server -p 6379:6379 -d redis
Подключение клиентом
apt-get install redis-tools
redis-cli -h 192.168.0.15
где 192.168.0.15 — адрес сервера Redis.
Для Windows — клиент Another Redis Desktop Manager.
Аутентификация
Установка на систему
vi /etc/redis/redis.conf
Раскомментируем и задаём пароль:
requirepass password
systemctl restart redis-server
redis-cli
> auth password
OK
> get test_key
Docker (через Compose)
mkdir -p /opt/docker/redis/etc
vi /opt/docker/redis/etc/redis.conf
requirepass password
cd /opt/docker/redis/
vi docker-compose.yml
services:
redis:
image: redis
container_name: 'redis-server'
restart: unless-stopped
ports:
- "6379:6379"
volumes:
- /opt/docker/redis/etc:/usr/local/etc/redis
command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
Контейнер redis-server из образа redis, порт 6379, каталог /opt/docker/redis/etc проброшен в /usr/local/etc/redis, запуск с нашим конфигом.
В новой схеме Compose ключ version не нужен, а сервисы размещаются под services:.
docker container stop redis-server && docker container rm -v redis-server
docker compose up -d
docker exec -it redis-server redis-cli
> auth password
OK
Подключение из языков программирования
PHP
apt-get install php-pear php-dev
pecl channel-update pecl.php.net
pecl install redis
Для каждого варианта использования PHP — отдельный файл (cli, fpm, apache):
vi /etc/php/8.3/cli/conf.d/20-redis.ini
vi /etc/php/8.3/fpm/conf.d/20-redis.ini
vi /etc/php/8.3/apache2/conf.d/20-redis.ini
extension=redis.so
В RPM-системах разделения по версиям PHP нет — один файл в /etc/php.d.
php -m | grep redis
redis
mkdir /scripts
vi /scripts/test_redis.php
<?php
$redis = new Redis();
$redis->connect('localhost', 6379);
$redis->auth('password');
$redis->set("test_php_key", "test php value");
echo $redis->get("test_php_key");
echo "rn";
?>
php /scripts/test_redis.php
test php value
Python
pip3 install redis
mkdir /scripts
vi /scripts/test_redis.py
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
import redis
r = redis.Redis(host='localhost', port=6379, db=0, password='password')
r.set('test_py_key', 'test py value')
redis_get = r.get('test_py_key')
print(redis_get)
chmod +x /scripts/test_redis.py
/scripts/test_redis.py
b'test py value'
Тонкости и подводные камни
bindпо умолчанию только локально — для сетевого доступа явно добавляйте IP интерфейса.- Открытый Redis в интернете — без
requirepassи брандмауэра сервер становится уязвимым; ограничивайте доступ. overcommit_memory=1— без этого фоновая запись (RDB/fork) может падать.somaxconn— низкое значение ограничивает очередь соединений под нагрузкой.supervised systemd— без этой опции systemd-управление работает неоптимально.- Compose
version— в новых версиях Docker Compose устарел и не требуется. KEYS *в продакшене — блокирующая операция на больших базах; используйтеSCAN.- Версии Redis — ветка 8.x (сентябрь 2026); клиенты старых версий могут требовать совместимости по RESP-протоколу.
Шпаргалка
apt-get install redis-server redis-tools
vi /etc/redis/redis.conf # supervised systemd; bind; requirepass
systemctl enable --now redis-server
redis-cli
> ping / set / get
# оптимизация
echo "vm.overcommit_memory = 1" > /etc/sysctl.d/99-overcommit_memory.conf
echo "net.core.somaxconn = 65535" > /etc/sysctl.d/99-somaxconn.conf
sysctl --system
# docker
docker run --name redis-server -p 6379:6379 -d redis
Проверено на: Ubuntu 22.04/24.04/26.04 + Redis 8.10.2.
Дата: Сентябрь 2026.