Установка, настройка и работа с Redis на Ubuntu
Используемые термины: Redis, Ubuntu.
Мы рассмотрим инструкцию для установки Redis как на операционную систему Ubuntu, так и в качестве контейнера Docker. Данную СУБД, как правило, применяют для хранения временной информации, например, кэша или сессий. Ее преимущество — скорость.
Установка Redis
Чистая на систему
Запуск в качестве Docker-контейнера
Проверка подключения и выполнения запроса
Подключение по сети
Требование авторизации
Пример подключения и запросов с языков программирования
PHP
Python
Установка, начальная настройка и запуск
Рассмотрим два варианта установки — чистая инсталляция на систему Linux Ubuntu и запуск контейнера из официального докер-образа.
Операционная система Ubuntu
Обновляем список пакетов:
apt-get update
Выполняем установку:
apt-get install redis-server
Открываем конфигурационный файл:
vi /etc/redis/redis.conf
Меняем значение для директивы supervised:
supervised systemd
* данная настройка позволит инициализировать запуск Redis как службы. В соответствии с официальной документацией, это позволит нам получить больше контроля над базой данных.
Разрешаем автозапуск сервиса:
systemctl enable redis-server
Перезапускаем redis-server:
systemctl restart redis-server
Наш сервер готов к работе.
Посмотреть версию установленной СУБД можно командой:
redis-server --version
Мы должны увидеть что-то на подобие:
Redis server v=5.0.7 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=636cde3b5c7a3923
* в данном примере установлена версия 5. На момент обновления данной инструкции последней версией была 6.
Docker
Необходимо, чтобы в нашей системе был установлен Docker.
После выполняем загрузку образа Redis:
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 a8c30431268c.
Проверка работы
Мы подключимся к нашему локальному серверу командой redis-cli.
а) при установке на систему:
redis-cli
б) если запустили контейнер:
docker exec -it redis-server redis-cli
* где redis-server — имя контейнера, которое мы задали во время его запуска.
Мы должны увидеть строку ввода команд Redis:
127.0.0.1:6379>
Для проверки подключения к серверу выполним команду:
> ping
В ответ мы должны увидеть:
PONG
Попробуем создать пару ключ - значение. Для этого вводим:
> set test_key "A test value"
Теперь попробуем его получить:
> get test_key
Мы должны получить наше значение:
"A test value"
Также можно получить список всех ключей командой:
> KEYS *
Сервер работает. Выходим из редис-консоли:
> quit
Полный список команд для работы в redis-cli можно найти на официальном сайте.
Доступ по сети
После установки Redis, к нему можно подключиться только локально. Чтобы мы могли использовать сервер баз данных для сетевых запросов, необходимо изменить настройки в конфигурационном файле. В зависимости от способа установки, наши действия будут отличаться.
а) Установка на операционную систему
Открываем конфигурационный файл:
vi /etc/redis/redis.conf
Находим строку:
bind 127.0.0.1 ::1
... и через запятую перечисляем IP-адреса сетевых интерфейсов сервера, на котором он должен принимать запросы:
bind 127.0.0.1 ::1 192.168.0.15
* в нашем примере мы добавили адрес 192.168.0.15 — предполагается, что это адрес нашего сервера.
Перезапускаем сервис:
systemctl restart redis-server
Готово, проверить, что сервер слушает нужный адрес можно командой:
ss -tunlp | grep :6379
б) Запуск в Docker
По умолчанию, Redis в докере разрешаем сетевые подключения в сети docker и при подключении с локального сервера. Чтобы сделать доступным контейнер при обращении к хосту Docker, нужно запустить контейнер с опцией -p 6379:6379.
Для начала, уничтожим запущенный контейнер:
docker container stop redis-server && docker container rm -v redis-server
И запустим его снова с нужной опцией:
docker run --name redis-server -p 6379:6379 -d redis
Подключение клиентом
На компьютере, с которого мы хотим подключиться к нашему серверу должна быть установлена утилита redis-tools. Например, на Ubuntu или Debian ее можно поставить простой командой:
apt-get install redis-tools
После мы можем подключится к нашему серверу баз данных командой:
redis-cli -h 192.168.0.15
* где 192.168.0.15 — адрес сервера Redis.
Для подключения из Windows можно установить клиент AnotherRedisDesktopManager.
Настройка аутентификации
При необходимости, мы можем установить логин и пароль для подключения к Redis. Наши действия будут отличаться в зависимости от способа установки сервера баз данных.
а) Установка на операционную систему
Открываем конфигурационный файл:
vi /etc/redis/redis.conf
Снимаем комментарий с параметра requirepass и в качестве значения присваиваем парольное слово:
requirepass password
* в данном примере в качестве пароля используем слово password.
Перезапускаем сервис:
systemctl restart redis-server
Подключаемся к консоли ввода команд:
redis-cli
Авторизовываемся:
> auth password
* где password — наше парольное слово.
Если мы ввели правильный пароль, то система покажет:
OK
Теперь можно вводить запросы, например:
> get test_key
б) Запуск в Docker
Для докера мы выполним запуск контейнера с помощью Docker Compose. Для начала, необходимо его установить.
Создаем каталог, в котором разместим конфигурационный файл на хосте докер:
mkdir -p /opt/docker/redis/etc
Создадим наш конфигурационный файл:
vi /opt/docker/redis/etc/redis.conf
requirepass password
* в данном примере в качестве пароля используем слово password.
Перейдем в каталог:
cd /opt/docker/redis/
Создадим файл docker-compose:
vi docker-compose.yml
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; наконец, запуск сервиса будет выполнен с параметром /usr/local/etc/redis/redis.conf — нашим конфигурационным файлом.
Уничтожаем ранее запущенный контейнер:
docker container stop redis-server && docker container rm -v redis-server
Запускаем новый с помощью docker-compose:
docker-compose up -d
Теперь можно подключиться к консоли redis-cli:
docker exec -it redis-server redis-cli
Авторизоваться:
> auth password
* где password — пароль, заданный в конфигурационном файле.
Мы должны увидеть:
OK
Можно попробовать ввести запросы:
> get test_key
Пример подключения из языков программирования
Рассмотрим примеры подключения и выполнения запросов из нескольких языков программирования.
PHP
Устанавливаем необходимые зависимости для PHP — пример для Ubuntu / Debian:
apt-get install php-pear php-dev
Также нам нужно установить расширение pecl — обновляем канал:
pecl channel-update pecl.php.net
И компилируем расширение:
pecl install redis
Для каждого возможного варианта использования PHP необходимо создать отдельный конфигурационной файл. В данном примере, под php 7.4 для cli, php-fpm, apache.
В системах на базе RPM (например, CentOS или Red Hat), нет разделения php на версии. Таким образом, нам нужно будет создать только один файл (как правило, в каталоге /etc/php.d).
а) CLI
vi /etc/php/7.4/cli/conf.d/20-redis.ini
extension=redis.so
б) PHP-FPM
vi /etc/php/7.4/fpm/conf.d/20-redis.ini
extension=redis.so
в) APACHE
vi /etc/php/7.4/apache/conf.d/20-redis.ini
extension=redis.so
Проверяем, что в php появился новый модуль:
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 "\r\n";
- ?>
* в данном скрипте мы подключаемся к нашему локальному серверу Redis, авторизовываемся и создаем ключ test_php_key со значением test php value. В конечном итоге, скрипт должен нам вернуть данное значение.
Запускаем на выполнение данный скрипт:
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)
* в данном скрипте мы подключаемся к нашему локальному серверу Redis, авторизовываемся и создаем ключ test_py_key со значением test py value. В конечном итоге, скрипт должен нам вернуть данное значение.
Разрешаем запускать наш скрипт на выполнение:
chmod +x /scripts/redis.py
Запускаем скрипт:
/scripts/test_redis.py
Мы должны получить в качестве ответа:
b'test py value'