Redis. Установка и настройка

17.11.2020 Софт

Что такое Redis? Redis (REmote DIctionary Server) - это не реляционная высокопроизводительная СУБД, сетевое хранилище данных типа «ключ - значение». Redis хранит все данные в оперативной памяти (RAM), доступ же к данным осуществляется по ключу (key-value хранилище). Такой подход обеспечивает высокую производительность, которая в десятки раз превосходит производительность обычных реляционных СУБД. Поэтому Redis известен своей исключительной высокой производительностью даже среди других key-value хранилищ.

Несмотря на то, что все данные хранятся в оперативной памяти и в любой момент эти данные могут потеряется и-за сбоя системы, так же существует возможность сохранять копию данных на диск, но Redis не сохраняет данные синхронно, а использует асинхронный механизм записи на диск, что позволяет сохранить высокую производительность. Redis поддерживает работу с многими языками программирования такими как: PHP, C++, Java, Python, Go и прочие.

Установка Redis в Ubuntu/Debian

Чтобы получить последнюю версию Redis, мы будем использовать apt для установки из официальных репозиториев.

apt update
apt upgrade
sudo apt install redis-server

После этого будет выполнена загрузка и установка Redis и ее зависимостей. После этого в файл конфигурации /etc/redis/redis.conf, созданный автоматически при установке, необходимо внести одно важное изменение. Внутри файла конфигурации найдите директиву supervised. Эта директива позволяет объявить систему инициализации для управления Redis как службой, предоставляя вам более широкий контроль за ее работой. Для директивы supervised по умолчанию установлено значение no. Поскольку вы запускаете Ubuntu, которая использует систему инициализации systemd, измените значение на systemd:

. . .

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised systemd
. . .

Перезапустите службу Redis, чтобы изменения в файле конфигурации вступили в силу:

sudo systemctl restart redis.service

Проверьте что служба работает:

sudo systemctl status redis

Если Redis сервер установлен и запустился, то он будет ожидать подключение на локальном интерфейсе 127.0.0.1 (localhost), порт стандартный - 6379.

Тестирование Redis

Что бы протестировать работу редиса подключитесь к нему используя redis-cli. Далее в командной строке наберите ping и в ответ вы должны получить что-то в виде:

$ redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> 

Если сервер отвечает ответом PONG значит он готов к работе. Что бы выйти из redis-cli используйте команду quit. Для вывода помощи по списку команд в консоли можно использовать команду HELP @string.

Особенности Redis

Интересная особенность Redis заключается в том, что это — однопоточный сервер. Такое решение сильно упрощает поддержку кода, обеспечивает атомарность операций и позволяет запустить по одному процессу Redis на каждое ядро процессора. Разумеется, каждый процесс будет прослушивать свой порт. Решение нетипичное, но вполне оправданное, так как на выполнение одной операции Redis тратит очень небольшое количество времени (порядка одной стотысячной секунды).

В Redis есть репликация. Репликация с несколькими главными серверами не поддерживается. Каждый подчиненный сервер может выступать в роли главного для других. Репликация в Redis не приводит к блокировкам ни на главном сервере, ни на подчиненных. На репликах разрешена операция записи. Когда главный и подчиненный сервер восстанавливают соединение после разрыва, происходит полная синхронизация (resync).

Также Redis поддерживает транзакции (будут последовательно выполнены либо все операции, либо ни одной) и пакетную обработку команд (выполняем пачку команд, затем получаем пачку результатов). Притом ничто не мешает использовать их совместно.

Еще одна особенность Redis — поддержка механизма publish/subscribe. С его помощью приложения могут создавать каналы, подписываться на них и помещать в каналы сообщения, которые будут получены всеми подписчиками.

Вывод

Redis — это мощный и быстрый вариант хранения данных, который при правильном использовании может принести много преимуществ. Он не имеет крутой кривой обучения, поэтому с ним легко начать работать. Также поставляется с удобным инструментом CLI, который помогает нам взаимодействовать с ним с помощью простых и интуитивно понятных команд.