2026-09-18
Установка, настройка и работа с Redis на Ubuntu (и в Docker)

Установка, настройка и работа с 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.


Оптимизация

  1. Linux может отказать Redis в выделении памяти при создании снимка БД (fork), если считает, что RAM недостаточно:
echo "vm.overcommit_memory = 1" > /etc/sysctl.d/99-overcommit_memory.conf
  1. Поднимаем максимальное число открытых сокетов в очереди:
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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *