DevOps
Redis: не только кэширование
Расширенные сценарии использования Redis: очереди, pub/sub, rate limiting, сессии и геопространственные данные.
ИК
Игор Кривошей
Full-stack инженер
February 28, 2026·10 мин

За пределами простого кэширования
Redis — это не просто быстрое хранилище ключ-значение. Это многофункциональная платформа данных.
Очереди сообщений
Redis Streams (рекомендуется)
JAVASCRIPT
// Producer
await redis.xadd('orders', '*', {
'order_id': '123',
'status': 'pending'
});
// Consumer
const messages = await redis.xreadgroup(
'GROUP', 'workers', 'worker-1',
'STREAMS', 'orders', '>'
);Pub/Sub для real-time
JAVASCRIPT
// Publisher
redis.publish('notifications', JSON.stringify({
userId: 123,
message: 'New order!'
}));
// Subscriber
redis.subscribe('notifications');
redis.on('message', (channel, message) => {
console.log('Received:', message);
});Rate Limiting
Гибкая защита от превышения лимитов:
LUA
-- Sliding window rate limiting
local key = KEYS[1]
local window = tonumber(ARGV[1])
local limit = tonumber(ARGV[2])
local now = redis.call('TIME')[1]
redis.call('ZREMRANGEBYSCORE', key, 0, now - window)
local count = redis.call('ZCARD', key)
if count < limit then
redis.call('ZADD', key, now, now)
redis.call('EXPIRE', key, window)
return 1
end
return 0Сессии пользователей
Почему Redis для сессий?
- Атомарные операции — race condition-защищенно
- TTL из коробки — автоматическая очистка
- Репликация — доступность при отказе
JAVASCRIPT
// Сохранение сессии
await redis.hset('session:abc123', {
userId: 456,
cart: JSON.stringify(items)
});
await redis.expire('session:abc123', 3600);Геопространственные данные
Поиск по радиусу для геосервисов:
Bash
# Добавление локаций
GEOADD stores 30.5234 50.4501 "Kyiv Store"
GEOADD stores 36.2304 49.9935 "Kharkiv Store"
# Поиск в радиусе 100км
GEORADIUS stores 30.5234 50.4501 100 km WITHDISTBloom filters
RedisBloom модуль для probabilistic data structures:
Bash
# Создание фильтра
BF.RESERVE seen_urls 0.01 1000000
# Проверка существования
BF.EXISTS seen_urls "https://example.com"
# Добавление
BF.ADD seen_urls "https://new-site.com"Векторный поиск
RedisSearch для semantic search:
Bash
# Создание индекса
FT.CREATE idx ON HASH SCHEMA
title TEXT
embedding VECTOR HNSW 6 DIM 1536 DISTANCE_METRIC COSINE
# Векторный поиск
FT.SEARCH idx "*=>[KNN 10 @embedding $vec]"
PARAMS 2 vec "<binary_embedding>"Мониторинг Redis
Ключевые метрики:
- memory_used — использование памяти
- connected_clients — активные соединения
- instantaneous_ops_per_sec — операций в секунду
- keyspace_hits/misses — эффективность кэша
Заключение
Redis — это полноценная платформа данных, а не просто кэш. Правильное использование:
- Ускоряет приложение в 10-100 раз
- Снижает нагрузку на основную БД
- Включает real-time функциональность
- Упрощает архитектуру системы
Теги
RedisBackendPerformanceCaching