Друзья, приветствую всех.  Изначально планировал писать эту статью в теме про телеграмм ботов и FSM, но решил что она может быть более универсальной и под другие задачи. В связи с этим выпускаю инструкцию отдельно.

Что такое Redis?

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

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

  1. Запустите командную строку.

  1. Ввод команды установки WSL:

wsl --install

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

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

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

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

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

  • Для запуска через командную строку используйте команду:

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

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

wsl --install -d <Distribution Name>

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

wsl --install -d Debian

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

wsl -d <DistributionName>

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

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

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

sudo apt update -y
sudo apt upgrade -y

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

sudo apt-add-repository ppa:redislabs/redis

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

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

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

sudo apt-get install redis-server -y

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

sudo service redis-server restart

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

sudo service redis-server status

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

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

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

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

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

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 сервер:

sudo service redis-server restart

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

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 серверу, чтобы можно было использовать его из различных приложений и с разных серверов

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

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

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

sudo service redis-server restart

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

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

  • через ссылку (с паролем и без)

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

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

  1. Заходим на сервер где развернут Redis

  2. Вбиваем команду

redis-cli -a your_pass
  1. Вводим команду:

ACL SETUSER new_user_name on ~* +@all
  • В этой команде:

    • new_user_name - это имя нового пользователя.

    • on - указывает на включение пользователя.

    • ~* - разрешает доступ ко всем ключам.

    • +@all - разрешает выполнение всех команд

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

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

ACL SETUSER newuser on ~* +@all RESETPASS your_new_password

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

from create_bot import bot
import hashlib

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

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

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

Работа с Redis

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

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

pip install redis

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

from aiogram.fsm.storage.redis import RedisStorage

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

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

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

  • redis:// - указываем что подключаемся к Redis

  • HOST - это или IP-адрес сервера или "localhost", если запустили Redis на локальной машине

  • 6379 - это порт по умолчанию. изменить можно через config

  • 0 - это номер базы данных. По умолчанию в Redis баз данных 16 штук (от 0 до 15). Число можно увеличить через config.

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

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

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

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

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

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

Импортируем Redis в 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}")

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

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

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

Заключение

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

В будущих статьях я продолжу глубже затрагивать эту тему, так как Redis часто используется в моей практике, особенно в реализации конечных автоматов (FSM) и планировщиков задач (apscheduler).

Подписывайтесь на обновления, чтобы узнать больше, и не забудьте оставить отклик по этой статье.

Благодарю за внимание. До скорого!

Комментарии (0)