Главная
|
Услуги и цены
VDS
Выделенные серверы
Размещение сервера
|
F.A.Q
|
О компании
|

Установка и базовая настройка Redis на Ubuntu, практический пример кеширования и работа с redis-cli

Redis это быстрый in-memory сервер данных. Он хранит данные в оперативной памяти и отдает их почти мгновенно. За счёт этого он идеально подходит для задач, где важна скорость ответа.

Если у вас проект на VDS, Redis может снять нагрузку с базы данных и сделать приложение отзывчивым даже при росте трафика.

Оглавление

  • Где можно использовать Redis
  • Установка Redis на Ubuntu
    • 1. Обновление системы
    • 2. Установка Redis
    • 3. Проверка работы
  • Базовая настройка безопасности
    • bind
    • Пароль
  • Ограничение памяти (очень важно на VDS)
  • Проверка после изменений
  • Практический пример кэширования на Python
    • Пример кода
    • Как сбрасывать кэш при обновлении
  • redis-cli
  • Посмотреть, какие ключи есть в кэше
  • Проверить конкретный ключ
  • Проверить время жизни (TTL)
  • Добавить данные вручную
  • Удалить ключ
  • Очистить весь кэш
  • Посмотреть статистику сервера
  • Посмотреть размер базы
  • Итог

Где можно использовать Redis

1. Кэширование данных (самый частый сценарий)

Например, на сервере размещен интернет-магазин. Пользователь открывает страницу товара -> приложение делает запрос к базе -> собирает данные -> формирует ответ.

Если посетителей становится много, база начинает принимать и отдавать слишком много запросов и производительность снижается.

Redis может работать как промежуточный слой:

  1. Первый запрос идёт в базу.
  2. Результат сохраняется в Redis.
  3. Все следующие запросы получают данные из Redis за доли миллисекунды.

База разгружается, страницы открываются быстрее.

Это снижает нагрузку на MySQL или PostgreSQL.

Если у вас API или сайт с повторяющимися запросами, то Redis будет полезен

2. Хранение сессий пользователей

Если проект написан на PHP, Python, Node.js или другом backend-языке, сессии пользователей нужно где-то хранить.

Можно в файлах или в базе, но при масштабировании это становится узким местом.

Redis отлично подходит для хранения сессий:

  • данные быстро читаются,
  • можно задать автоматическое удаление по времени,
  • сервер не “засоряется” устаревшими файлами.

Это особенно полезно, если вы планируете запускать несколько backend-серверов. Redis становится общим хранилищем сессий.

3. Ограничение частоты запросов (rate limiting)

Например, у вас есть API. Нужно ограничить пользователей: не более 100 запросов в минуту.

Redis позволяет:

  • сохранять счётчик запросов,
  • автоматически обнулять его через заданное время.

Это реализуется буквально несколькими командами и работает очень быстро. Без Redis такую задачу приходится решать через базу, что создаёт лишнюю нагрузку.

4. Очереди задач

Допустим, пользователь загрузил изображение. Его нужно обработать: изменить размер, оптимизировать, сохранить.

Если делать это сразу, то пользователь будет ждать, если процесс идет слишком долго, то веб сервер может упасть по таймауту.

С Redis можно организовать очередь:

  1. Приложение добавляет задачу в очередь.
  2. Фоновый процесс (например через Celery) обрабатывает её отдельно, не блокируя основной поток.
  3. Пользователь получает быстрый ответ.

Так строятся системы отправки email, обработки видео, фоновые отчёты и многое другое.

5. Временное хранение данных

Иногда нужно хранить данные “на пару минут”. Например:

  • одноразовые коды подтверждения,
  • токены восстановления пароля,
  • временные ключи API.

Redis идеально подходит для этого благодаря TTL (время жизни ключа). Вы задаёте срок и данные удаляются автоматически.

Note

Если вы только купили сервер:

Подключитесь к серверу

Выполните подготовку сервера к работе

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

1. Обновление системы

Сначала обновляем список пакетов и систему

apt update && apt upgrade -y 

2. Установка Redis

Устанавливаем Redis из официального репозитория Ubuntu:

apt install redis-server -y 

Проверяем статус:

systemctl status redis 

Вы должны увидеть active (running).

Pasted image 20260228112624.png

Если сервис не запустился, то смотрим логи:

journalctl -u redis 

3. Проверка работы

Подключаемся:

redis-cli 

Проверяем:

ping 

Ответ PONG означает, что сервер работает.

Ниже разберем что ещё можно сделать через redis-cli

Выйти можно с помощью Ctr-C

Базовая настройка безопасности

Файл конфигурации:

nano /etc/redis/redis.conf 

bind

Убедитесь, что указано:

bind 127.0.0.1 ::1 

Это означает, что Redis доступен только локально. Для большинства проектов этого достаточно.

Пароль

Найдите строку:

Note

Ctrl-W - поиск по файлу в nano

# requirepass foobared 

Раскомментируйте и задайте сложный пароль:

requirepass СЛОЖНЫЙ_ПАРОЛЬ 

Ограничение памяти (очень важно на VDS)

Redis хранит данные в RAM. Если не ограничить память, он может занять всё доступное пространство.

В конфиге добавьте:

maxmemory 256mb
maxmemory-policy allkeys-lru 

allkeys-lru удаляет наименее используемые ключи при нехватке памяти. Для кэша это оптимальный вариант.

На небольших VDS это спасает от внезапных падений приложений.

Pasted image 20260228113252.png

Проверка после изменений

systemctl restart redis
systemctl status redis 

Проверьте подключение через redis-cli и убедитесь, что авторизация работает.

Практический пример кэширования на Python

Предположим, у нас есть 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 
  1. Сначала выполняется попытка получить данные из Redis.
  2. Если ключ найден база вообще не участвует.
  3. Если ключа нет выполняется SQL-запрос.
  4. Результат сохраняется в Redis с TTL 300 секунд.
  5. Повторные запросы идут уже в память.

Как сбрасывать кэш при обновлении

Если товар изменился, кэш лучше удалить:

r.delete(f"product:{product_id}") 

Это простейшая стратегия инвалидации. В реальных проектах её обычно вызывают после UPDATE-запроса к базе.

Если страницу товара открывают 10000 раз в сутки:

  • без кэша → 10000 SQL-запросов
  • с TTL 5 минут → реальных обращений к базе 10

redis-cli

Через redis-cli вы можете:

  • проверить, создаются ли ключи,
  • убедиться, что TTL выставляется,
  • удалить кэш вручную,
  • посмотреть нагрузку и использование памяти.

Подключаемся:

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)

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 это инструмент, который:

  • ускоряет сайты,
  • разгружает базы данных,
  • помогает строить очереди,
  • упрощает масштабирование,
  • делает архитектуру гибче.
logo
© 2022 62yun
Все права защищены
vk.com/62yuncom
support@62yun.ru
logo
vk.com/62yuncom
support@62yun.ru
Услуги
VDS Выделенные серверы
Полезное
F.A.Q О компании Политика конфиденциальности Оферта
Способы оплаты
wechatpay visa mastercard
MirAccept
Партнеры
25port
© 2022 62yun Все права защищены
ВВЕРХ