1. Cache с TTL
Не кешируй всё подряд. Кешируй только то, что часто читается и редко меняется.
cache_key = "project:list:ru"
cached = redis.get(cache_key)
if cached:
return json.loads(cached)
data = load_from_database()
redis.setex(cache_key, 300, json.dumps(data))2. Rate limit
Для Telegram-ботов и API endpoints можно ограничивать частые запросы по user_id или IP.
key = f"rate:user:{user_id}"
count = redis.incr(key)
if count == 1:
redis.expire(key, 60)
if count > 30:
raise TooManyRequests()3. Distributed lock
Lock нужен, чтобы одна задача не обработалась два раза параллельно.
lock = redis.set("lock:import", "1", nx=True, ex=120)
if not lock:
return "already running"
try:
run_import()
finally:
redis.delete("lock:import")4. Очередь задач
Если операция долгая, не держи HTTP request открытым. Положи задачу в queue и обработай worker’ом.
- API принимает запрос.
- Создаёт job_id.
- Кладёт payload в Redis queue.
- Worker выполняет задачу.
- Frontend или бот получает статус.
5. Нейминг ключей
Ключи должны читаться человеком. Хороший формат: область, сущность, идентификатор и язык/тип, если нужно. Так легче чистить cache точечно и искать проблему в production.
project:list:ru
project:item:4302:ru
rate:user:12345
lock:import:real-estate-feed6. Cache invalidation
Самая частая ошибка — обновить данные в базе и забыть очистить cache. Для простого проекта используй короткий TTL. Для админки и каталога добавь явную очистку при сохранении объекта.
- После обновления объекта удаляй
project:item:{id}. - После импорта удаляй списки каталога.
- Для SEO-страниц держи отдельный ключ по URL.
7. Persistence и память
Redis быстрый, но его нельзя превращать в единственное хранилище важных данных. Очереди и cache можно восстановить, а платежи, заявки и пользователи должны жить в основной базе.
redis-cli info memory
redis-cli keys "project:*"
redis-cli ttl project:list:ruChecklist
- У каждого cache key есть TTL.
- Locks имеют expire, чтобы не зависнуть навсегда.
- Redis не используется как единственная база важных данных.
- Очереди логируют ошибки задач.
- Есть мониторинг памяти Redis.