Cache
createCache de @bext-stack/framework/kv correspond au Cache::remember de Laravel dans TypeScript : mémoriser une valeur sérialisable en JSON derrière une clé, via un stockage interchangeable. Ce mécanisme est distinct du cache de fragments <ISR> décrit dans
@bext-stack/framework/cache, qui met en cache des sous-arbres HTML déjà rendus ; voir Mise en cache.
Quand l'utiliser#
- Éviter de recalculer une opération coûteuse pendant sa période de validité : rapport, agrégat ou réponse d’une API tierce.
- Partager de petites options ou valeurs entre requêtes via le stockage KV du SDK.
remember et fonctions associées#
import { createCache, kvStore } from "@bext-stack/framework/kv";
const cache = createCache({ store: kvStore({ appId: "my-site" }) });
// compute once, serve from cache within the TTL:
const report = await cache.remember("report:monthly", 300, () => buildReport());
await cache.put("flag", true, 60);
await cache.get<boolean>("flag"); // true | null
await cache.has("flag");
await cache.forget("flag");
const token = await cache.pull("one-time"); // get + forget
const won = await cache.add("lock", 1, 10); // set only if absent → true/false
createCache sérialise en JSON : vous mettez donc en cache des objets typés, pas seulement des chaînes.
remember distingue correctement une valeur absente d’une valeur évaluée comme fausse : false,
0 et "" sont bien mis en cache ; ils ne sont pas considérés comme absents et recalculés.
| Membre | Fait |
|---|---|
remember(key, ttl, fn) |
lire, ou calculer, stocker et renvoyer |
get(key) / put(key, value, ttl?) |
lecture et écriture typées |
has / forget |
présence et suppression |
pull(key) |
lire puis oublier |
add(key, value, ttl?) |
écrire uniquement en cas d’absence : un verrou simple |
Stockages#
Le cache est une couche légère au-dessus d’un CacheStore :
| Magasin | Portée | Utiliser |
|---|---|---|
kvStore({ appId }) |
requête croisée/processus (SDK KV sur bouclage) | partagé, durable |
memoryStore() |
per-V8-isolat Map avec TTL |
tests de courte durée, à portée de requête |
Apportez le vôtre en implémentant get / set / delete. Une option prefix espace les clés afin que deux caches sur un magasin n'entrent pas en collision.
Essayez-le#
Le démo de cache en direct appelle remember deux fois : l'usine s'exécute une fois et le deuxième appel est servi à partir du cache (même horodatage). Source dans sites/demo/src/app/examples/cache/page.tsx.
Voir aussi#
- Mise en cache — mise en cache de pages/ISR et cache de fragments
<ISR>. - Travaux et file d'attente — met en cache les résultats de tâches coûteuses.
- Boîte à outils de candidature — le reste de la couche d'application TypeScript.