# Cache Stampede Prevention

> Evitar que múltiples workers recarguen el mismo dato al expirar simultáneamente

- Skill: `davidcastagnetoa/cache-stampede-prevention` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add davidcastagnetoa/cache-stampede-prevention`
- Raw SKILL.md: https://api.skillmd.com/api/skills/davidcastagnetoa/cache-stampede-prevention/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: davidcastagnetoa (https://skillmd.com/u/davidcastagnetoa)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/davidcastagnetoa/cache-stampede-prevention

---


# cache_stampede_prevention

Prevención de cache stampede (thundering herd) cuando una key popular expira y múltiples workers intentan recalcularla simultáneamente, saturando el backend.

## When to use

Usar en el `cache_agent` para keys de alta concurrencia como configuración de umbrales, blacklists y resultados de modelos. No es necesario para keys de sesión individual.

## Instructions

1. **Probabilistic Early Expiration**: renovar la key antes de que expire.
   ```python
   ttl = redis.ttl(key)
   if ttl < threshold and random.random() < probability:
       value = recompute()
       redis.set(key, value, ex=original_ttl)
   ```
2. **Lock-based**: usar lock distribuido para que solo un worker recalcule.
   ```python
   if redis.set(f'lock:{key}', 1, nx=True, ex=5):
       value = recompute()
       redis.set(key, value, ex=ttl)
       redis.delete(f'lock:{key}')
   ```
3. Configurar jitter en TTLs: `ttl = base_ttl + random.randint(0, 60)`.
4. Para la blacklist, usar refresh programado (Celery Beat) en lugar de TTL.
5. Monitorizar cache miss rate por key pattern para detectar stampedes.

## Notes

- Probabilistic Early Expiration es más simple y no requiere locks distribuidos.
- El lock-based approach garantiza un solo recálculo pero puede causar latencia si el lock se pierde.
- Combinar ambas técnicas: jitter + lock para las keys más críticas.

