agentleFS
BappozBappoz/My-Claude-Skills/skills/engineering/caching-strategies/SKILL.md

caching-strategies

Skill1 starsChanged 4 months agoMITView on GitHub

Estratégias de cache production-grade: padrões (cache-aside, read/write-through, write-behind), invalidação, TTL, camadas (browser/CDN/app/DB), cache stampede e chaves. Use quando o usuário mencionar: "cache", "caching", "invalidação de cache", "Redis", "CDN", "TTL", "cache-aside", "memoization", "cache stampede", "dados velhos", "acelerar leitura". Liga com [[performance]] e [[system-design]].

11 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

1 rule. 0 are common, 1 is distinctive, and 0 are very specific to this project.

  • 0

    Common

    Most of the 9 edited versions we read keep these.

  • 1

    Distinctive

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Default pragmático: cache-aside + TTL.

    line 38

“Common” is measured: kept by at least 6 in 10 of the 9 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Caching Strategies

Você atua como engenheiro de performance de dados. Cache troca frescor por velocidade e custo. A parte fácil é guardar; a difícil — e onde moram os bugs — é invalidar. Cacheie com propósito, não por reflexo.

"There are only two hard things in Computer Science: cache invalidation and naming things." — Phil Karlton

Quando cachear (e quando não)

Cacheie quando: leitura ≫ escrita, o dado é caro de computar/buscar, e um pouco de staleness é tolerável. Não cacheie quando: o dado muda a cada leitura, precisa ser sempre exato (saldo — ver [[payment-systems]]), ou a taxa de acerto seria baixa (cache frio custa sem ganhar).

Camadas (mais perto do usuário = mais rápido/barato)

Browser (HTTP cache) → CDN (edge) → Cache de app (Redis) → Banco (buffer pool)

Cacheie na camada mais externa que a corretude permite. Um asset estático vai à CDN; uma query cara vai ao Redis; uma resposta por-usuário não vai em camada compartilhada sem chave por usuário.

Padrões de cache

PadrãoComoBom paraCuidado
Cache-aside (lazy)App lê cache; miss → busca no DB e populaO mais comum; leituraPrimeiro acesso é miss; risco de stale
Read-throughO cache busca no DB por você (via lib)Simplifica o appAcopla ao provedor de cache
Write-throughEscreve no cache e no DB juntosCache sempre fresco na escritaLatência de escrita maior
Write-behindEscreve no cache; DB async depoisEscrita rápida, absorve picosRisco de perda se cair antes de persistir

Default pragmático: cache-aside + TTL.

async function getUser(id) {
  const key = `user:${id}`;
  let u = await redis.get(key);
  if (u) return JSON.parse(u);            // hit
  u = await db.users.find(id);            // miss → busca
  await redis.set(key, JSON.stringify(u), 'EX', 300);  // popula com TTL 5min
  return u;
}

Invalidação (o problema difícil)

Três abordagens (combine):

  1. TTL / expiração — simples e robusto: aceite dado velho por até N segundos. Escolha o TTL pela tolerância do negócio.
  2. Invalidação na escrita — ao atualizar o dado, apague/atualize a chave (redis.del(key)). Preciso, mas exige achar todas as chaves afetadas.
  3. Versão/tag na chave — inclua versão no key (user:123:v7); bump da versão invalida em massa sem apagar.

Regra: prefira apagar (del) a atualizar a chave na escrita — mais simples e menos sujeito a corrida.

Cache stampede (thundering herd)

Quando uma chave popular expira, mil requests simultâneos furam para o DB de uma vez. Mitigações: lock/single-flight (só um recomputa, o resto espera), TTL jitter (espalhar expiração), early recompute (renovar antes de expirar), stale-while-revalidate (servir o velho enquanto atualiza em background).

Boas práticas de chave

  • Namespace claro: entidade:id:campo (order:42:items).
  • Inclua o que muda o resultado (idioma, versão, usuário) na chave — senão serve resposta errada.
  • Nunca cacheie dado por-usuário sob chave global.

Recursos externos

RecursoO que pegar
Redis — Caching patternsCache-aside, TTL, estruturas, locks.
AWS — Caching best practicesCamadas, TTL, invalidação.
MDN — HTTP CachingCache-Control, ETag, stale-while-revalidate.
Cloudflare — What is a CDNCache de borda.
Facebook — Scaling MemcacheStampede/leases em escala real.
[[performance]] · [[system-design]]Onde o cache entra na performance/arquitetura.

Do / Don't

DoDon't
Cache-aside + TTL como baseCachear tudo por reflexo
Apagar chave na escritaTentar atualizar e correr risco de corrida
Chave inclui tudo que muda o resultadoChave global para dado por-usuário
Mitigar stampede (lock/jitter/SWR)Deixar chave popular expirar sem proteção
Cachear na camada mais externa seguraCachear dado que precisa ser exato

Checklist

  • Confirmado leitura ≫ escrita e staleness tolerável
  • Padrão escolhido (default: cache-aside + TTL)
  • TTL definido pela tolerância do negócio
  • Invalidação na escrita (preferir del) + versão/tag quando útil
  • Proteção contra stampede em chaves quentes
  • Chaves com namespace e todas as dimensões que afetam o resultado
  • Nada exato/por-usuário cacheado indevidamente

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.