Skip to content

Redis сервер: Полное руководство

https://habr.com/ru/articles/821363/

Что такое Redis?

Redis (Remote Dictionary Server) — это мощная in-memory база данных с открытым исходным кодом, которая используется для кеширования, управления сессиями и многого другого. Она обеспечивает высокую производительность и позволяет эффективно хранить и извлекать данные в реальном времени. В этом руководстве мы рассмотрим два способа установки и настройки Redis сервера:

  • на Windows 10/11 через WSL (Windows Subsystem for Linux)
  • на VPS сервере.

Установка Linux Ubuntu на Windows 10/11 и Redis

Запустите командную строку. Ввод команды установки WSL:

shell
wsl --install

Если WSL еще не установлен, начнется загрузка и установка дистрибутива Ubuntu.

После завершения установки, создайте имя пользователя и пароль.

Если установка была выполнена ранее, то после ввода этой команды произойдет запуск wsl.

Запуск Linux Ubuntu на Windows 10/11

Запустите Ubuntu через командную строку или через меню «Пуск». Используйте команду:

shell
wsl

Можете изменить дистрибутив Ubuntu на любой другой доступный. Посмотреть список доступных дистрибутивов можно командой:

shell
wsl --list --online

Для установки нового дистрибутива используйте команду:

shell
wsl --install -d <Distribution Name>

Замените <Distribution Name> именем дистрибутива, который хотите установить. Например:

shell
wsl --install -d Debian

Для запуска конкретного дистрибутива используйте команду:

shell
wsl -d <DistributionName>

В данном примере мы оставим Ubuntu.

Установка и настройка Redis Server на Windows под Ubuntu

Заходим в Ubuntu и приступаем к настройке Redis:

shell
sudo apt update -y
sudo apt upgrade -y

Добавление репозитория:

shell
sudo apt-add-repository ppa:redislabs/redis

Обновление пакетов:

shell
sudo apt-get update -y
sudo apt-get upgrade -y

Установка Redis сервера:

shell
sudo apt-get install redis-server -y

Перезагрузка Redis сервера:

shell
sudo service redis-server restart

Проверка состояния сервера:

shell
sudo service redis-server status

Если результат такой же, как на скриншоте, значит сервер Redis запущен и готов к использованию.

img.png

Дополнительные настройки для удалённого доступа

Инструкции аналогичны до момента, где вы настроили ваш VPS сервер на Linux и установили Redis сервер. Далее следуют некоторые отличия.

Если планируете использовать Redis сервер с другими серверами или с вашей локальной машины, необходимо изменить конфигурацию.

Откройте конфигурационный файл Redis:

shell
sudo nano /etc/redis/redis.conf

Измените следующие параметры:

  • Замените bind 127.0.0.1 -::1 на bind 0.0.0.0
  • Замените #requirepass foobared на requirepass your_password

Сохраните изменения и закройте файл, нажав CTRL + X, затем Y для подтверждения сохранения и ENTER.

Перезапустите Redis сервер:

shell
sudo service redis-server restart

Проверьте статус сервера:

shell
sudo service redis-server status

Если ошибок нет, значит всё настроено корректно.

Зачем мы изменяем настройки bind и #requirepass foobared на requirepass your_password в Redis?

  1. Изменение bind 127.0.0.1 -::1 на bind 0.0.0.0
  • Эта настройка позволяет серверу принимать соединения на всех сетевых интерфейсах. То есть, Redis будет доступен для подключения с любых IP-адресов, что необходимо, если вы хотите подключаться к серверу удалённо с других машин или серверов.
  • Причина изменения: Для обеспечения удалённого доступа к Redis серверу, чтобы можно было использовать его из различных приложений и с разных серверов

Изменение #requirepass foobared на requirepass your_password

Причина изменения: По умолчанию пароль для подключения не задан, а этим параметром установили пароль для подключения. Тут очень важно чтоб пароль был надежен, особенно когда вы установили bind 0.0.0.0

Перезапустите Redis сервер, чтобы применить изменения:

shell
sudo service redis-server restart

Подключение к Redis:

В зависимости от того использовали вы пароль или нет может быть 2 варианта подключения:

  • через ссылку (с паролем и без)
  • через указание параметров подключения вместе с паролем и username

По умолчанию username = "default". В большинстве случаев этого достаточно, но если вы хотите добавить отдельного пользователя со своим именем и паролем, то необходимо воспользоваться утилитой redis-cli.

Заходим на сервер где развернут Redis используя команду

shell
redis-cli -a your_pass

Вводим команду:

shell
ACL SETUSER new_user_name on ~* +@all

В этой команде:

  • new_user_name - это имя нового пользователя.
  • on - указывает на включение пользователя.
  • ~* - разрешает доступ ко всем ключам.
  • +@all - разрешает выполнение всех команд

Установка пароля для нового пользователя (опционально):

Если вы хотите установить пароль для нового пользователя, добавьте параметр RESETPASS с указанием нового пароля:

shell
ACL SETUSER newuser on ~* +@all RESETPASS your_new_password

Обратите внимание. Пароль необходимо передавать в хэшированном виде. Вот пример реализации на python.

python
import hashlib

password = 'your_pass'
password_hash = hashlib.sha256(password.encode()).hexdigest()
print(password_hash)  # результат 8e498bfcf8aa1fa28a764b8eeb5546f44c0c24dba0c6587b112ced55f688a4f6

И после этого установка пароля будет выглядеть так:

shell
ACL SETUSER new_user_name on ~* +@all RESETPASS #8e498bfcf8aa1fa28a764b8eeb5546f44c0c24dba0c6587b112ced55f688a4f6

Работа с Redis

Сильно акцентировать внимание на этом не буду, так как можете писать на разных языках программирования и использовать redis под разные задачи. Но общие принципы покажу, как подключаться в контексте телеграмм ботов (будем Redis использовать в качестве storage для FSM на aiogram 3).

Устанавливаем redis

shell
pip install redis

Импортируем хранилище:

python
from aiogram.fsm.storage.redis import RedisStorage

Инициируем storage по ссылке без пароля:

python
storage = RedisStorage.from_url('redis://HOST:6379/0')

Обратите внимание на формат ссылки. Она состоит из нескольких частей:

  • redis:// - указываем что подключаемся к Redis
  • HOST - это IP-адрес сервера или "localhost", если запустили Redis на локальной машине
  • 6379 - это порт по умолчанию. изменить можно через config
  • 0 - это номер базы данных. По умолчанию в Redis баз данных 16 штук (от 0 до 15). Число можно увеличить через config.

Обратите внимание, что если в подключении имеется пароль, то данный метод не сработает.

Инициируем storage по ссылке с паролем и пользователем:

python
storage = RedisStorage.from_url('redis://username:password@193.3.168.217:6379/0')

Обратите внимание на формат ссылки. Тут дополнительно передаем пользователя и пароль для подключения. Пароль на этом этапе передаем в обычном виде (не в виде хэша).

Напоминаю, что если вы не добавляли пользователя отдельно, то его username = "default"

Подключение к Redis с явным указанием параметров в python:

python
import redis

r = redis.Redis(host='HOST', port=6379, db=0, username='username', password='your_pass')

# Тестируем соединение:
try:
    info = r.info()
    print(info['redis_version'])
    response = r.ping()
    if response:
         print("Подключение успешно!")
    else:
         print("Не удалось подключиться к Redis.")
except redis.exceptions.RedisError as e:
    print(f"Ошибка: {e}")

Смотрим на консоль:

shell
7.2.5
Подключение успешно!

r.ping() отправляет команду PING к Redis. Если Redis отвечает, метод вернет True. Так же получили версию redis на сервере к которому подключались, а значит, что все сработало!

Заключение

Поднятие Redis сервера на различных платформах предоставляет множество возможностей для эффективного управления данными. Будь то кеширование, сессии или другие задачи, Redis обеспечивает высокую производительность и надёжность. Следуя данному руководству, вы сможете легко развернуть и настроить Redis сервер на Windows через WSL или на VPS, и начать использовать его в своих проектах.

Contacts: teffal@mail.ru