Redis это быстрый in-memory сервер данных. Он хранит данные в оперативной памяти и отдает их почти мгновенно. За счёт этого он идеально подходит для задач, где важна скорость ответа.
Если у вас проект на VDS, Redis может снять нагрузку с базы данных и сделать приложение отзывчивым даже при росте трафика.
Например, на сервере размещен интернет-магазин. Пользователь открывает страницу товара -> приложение делает запрос к базе -> собирает данные -> формирует ответ.
Если посетителей становится много, база начинает принимать и отдавать слишком много запросов и производительность снижается.
Redis может работать как промежуточный слой:
База разгружается, страницы открываются быстрее.
Это снижает нагрузку на MySQL или PostgreSQL.
Если у вас API или сайт с повторяющимися запросами, то Redis будет полезен
Если проект написан на PHP, Python, Node.js или другом backend-языке, сессии пользователей нужно где-то хранить.
Можно в файлах или в базе, но при масштабировании это становится узким местом.
Redis отлично подходит для хранения сессий:
Это особенно полезно, если вы планируете запускать несколько backend-серверов. Redis становится общим хранилищем сессий.
Например, у вас есть API. Нужно ограничить пользователей: не более 100 запросов в минуту.
Redis позволяет:
Это реализуется буквально несколькими командами и работает очень быстро. Без Redis такую задачу приходится решать через базу, что создаёт лишнюю нагрузку.
Допустим, пользователь загрузил изображение. Его нужно обработать: изменить размер, оптимизировать, сохранить.
Если делать это сразу, то пользователь будет ждать, если процесс идет слишком долго, то веб сервер может упасть по таймауту.
С Redis можно организовать очередь:
Так строятся системы отправки email, обработки видео, фоновые отчёты и многое другое.
Иногда нужно хранить данные “на пару минут”. Например:
Redis идеально подходит для этого благодаря TTL (время жизни ключа). Вы задаёте срок и данные удаляются автоматически.
Note
Если вы только купили сервер:
Выполните подготовку сервера к работе
Сначала обновляем список пакетов и систему
apt update && apt upgrade -y
Устанавливаем Redis из официального репозитория Ubuntu:
apt install redis-server -y
Проверяем статус:
systemctl status redis
Вы должны увидеть active (running).
Pasted image 20260228112624.png
Если сервис не запустился, то смотрим логи:
journalctl -u redis
Подключаемся:
redis-cli
Проверяем:
ping
Ответ PONG означает, что сервер работает.
Ниже разберем что ещё можно сделать через redis-cli
Выйти можно с помощью Ctr-C
Файл конфигурации:
nano /etc/redis/redis.conf
Убедитесь, что указано:
bind 127.0.0.1 ::1
Это означает, что Redis доступен только локально. Для большинства проектов этого достаточно.
Найдите строку:
Note
Ctrl-W - поиск по файлу в nano
# requirepass foobared
Раскомментируйте и задайте сложный пароль:
requirepass СЛОЖНЫЙ_ПАРОЛЬ
Redis хранит данные в RAM. Если не ограничить память, он может занять всё доступное пространство.
В конфиге добавьте:
maxmemory 256mb
maxmemory-policy allkeys-lru
allkeys-lru удаляет наименее используемые ключи при нехватке памяти. Для кэша это оптимальный вариант.
На небольших VDS это спасает от внезапных падений приложений.
Pasted image 20260228113252.png
systemctl restart redis
systemctl status redis
Проверьте подключение через redis-cli и убедитесь, что авторизация работает.
Предположим, у нас есть API на Python (например, Flask или FastAPI), которое получает данные товара из базы PostgreSQL.
Без кэша каждый запрос идёт напрямую в базу. Добавим Redis как промежуточный слой.
import json
import redis
import psycopg2
# Подключение к Redis
r = redis.Redis(
host="127.0.0.1",
port=6379,
password="СЛОЖНЫЙ_ПАРОЛЬ",
decode_responses=True
)
# Подключение к базе (может быть любая, например mysql)
conn = psycopg2.connect(
dbname="shop",
user="user",
password="password",
host="127.0.0.1"
)
def get_product(product_id: int):
cache_key = f"product:{product_id}"
# 1. Проверяем кэш
cached_product = r.get(cache_key)
if cached_product:
print("Данные получены из Redis")
return json.loads(cached_product)
# 2. Если нет — запрашиваем из базы
with conn.cursor() as cursor:
cursor.execute("SELECT id, name, price FROM products WHERE id = %s", (product_id,))
row = cursor.fetchone()
if not row:
return None
product = {
"id": row[0],
"name": row[1],
"price": float(row[2])
}
# 3. Сохраняем в Redis на 300 секунд (5 минут)
r.setex(cache_key, 300, json.dumps(product))
print("Данные получены из базы и сохранены в кэш")
return product
Если товар изменился, кэш лучше удалить:
r.delete(f"product:{product_id}")
Это простейшая стратегия инвалидации. В реальных проектах её обычно вызывают после UPDATE-запроса к базе.
Если страницу товара открывают 10000 раз в сутки:
Через redis-cli вы можете:
Подключаемся:
redis-cli
Если включена авторизация:
redis-cli -a СЛОЖНЫЙ_ПАРОЛЬ
Note
⚠ В продакшене не используйте KEYS *, если данных много.
KEYS *
Если вы кэшировали товар с ключом product:15, вы его увидите.
Pasted image 20260228113624.png
Более безопасный вариант:
SCAN 0
Redis вернёт курсор и список ключей. Это не блокирует сервер.
GET product:15
Если данные есть вы увидите JSON.
Проверить, существует ли ключ:
EXISTS product:15
Ответ:
1 - ключ есть0 - ключа нет
TTL product:15
Возможные ответы:
300 - осталось 300 секунд-1 - ключ есть, но без срока жизни-2 - ключа не существуетЭто позволяет понять, работает ли setex() из Python.
Pasted image 20260228114123.png
Добавить ключ:
SET test_key "hello world"
Добавить с TTL (например, 60 секунд):
SETEX temp_key 60 "temporary value"
Проверить:
GET temp_key
TTL temp_key
Через минуту ключ исчезнет автоматически.
Удаление одного ключа:
DEL product:15
Удалить несколько:
DEL product:15 product:16 product:17
Note
⚠ Осторожно, это удалит ВСЁ:
FLUSHDB
Очень полезно при нагрузке:
INFO
Здесь можно увидеть:
Например, строка used_memory_human покажет, сколько RAM занимает Redis.
DBSIZE
Показывает, сколько ключей сейчас хранится.
Redis это инструмент, который: