Друзья, приветствую всех. Изначально планировал писать эту статью в теме про телеграмм ботов и FSM, но решил что она может быть более универсальной и под другие задачи. В связи с этим выпускаю инструкцию отдельно.
Что такое Redis?
Redis (Remote Dictionary Server) — это мощная in-memory база данных с открытым исходным кодом, которая используется для кеширования, управления сессиями и многого другого. Она обеспечивает высокую производительность и позволяет эффективно хранить и извлекать данные в реальном времени. В этом руководстве мы рассмотрим два способа установки и настройки Redis сервера: на Windows 10/11 через WSL (Windows Subsystem for Linux) и на VPS сервере.
Установка Linux Ubuntu на Windows 10/11 и Redis
Запустите командную строку.
Ввод команды установки 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?
Изменение 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 сервер, чтобы применить изменения:
sudo service redis-server restart
Подключение к Redis:
Тут, в зависимости от того использовали вы пароль или нет может быть 2 варианта подключения:
через ссылку (с паролем и без)
через указание параметров подключения вместе с паролем и username
По умолчанию username = "default". В большинстве случаев этого достаточно, но если вы хотите добавить отдельного пользователя со своим именем и паролем, то необходимо воспользоваться утилитой redis-cli.
Заходим на сервер где развернут Redis
Вбиваем команду
redis-cli -a your_pass
Вводим команду:
ACL SETUSER new_user_name on ~* +@all
В этой команде:
new_user_name
- это имя нового пользователя.on
- указывает на включение пользователя.~*
- разрешает доступ ко всем ключам.+@all
- разрешает выполнение всех команд
Установка пароля для нового пользователя (опционально):
Если вы хотите установить пароль для нового пользователя, добавьте параметр 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).
Подписывайтесь на обновления, чтобы узнать больше, и не забудьте оставить отклик по этой статье.
Благодарю за внимание. До скорого!