Tárolók
Több kassza funkció közös tárolót használ: a munkamenet (cookieStore), a próbálkozás-napló (attemptLedger), a createOnce zárja (createOnceLock), a webhookok ismétlés-szűrője (dedupe), az adószám-gyorsítótár és a bizonylatnapló. Mindegyik ugyanazt a KeyValueStore felületet várja, amelyet a kassza/stores adapterei adnak.
| Adapter | Kliens | Atomikus műveletek |
|---|---|---|
memoryStore() | – (egy folyamaton belül) | igen |
upstashRedisStore(redis) | @upstash/redis | igen (EVAL) |
ioredisStore(redis) | ioredis | igen (EVAL) |
nodeRedisStore(client) | redis (node-redis) | igen (EVAL) |
durableObjectStore(stub) | Cloudflare Durable Object | igen |
cloudflareKvStore(namespace) | Cloudflare KV | nem |
customStore(store) | saját get / set / delete | ha a sajátod tud |
A régi nevek (upstashRedisCookieStore és társai) és a kassza/cookie-stores útvonal változatlanul működnek.
Atomikus műveletek#
A get, set és delete mellett a felület három nem kötelező, atomikus műveletet ismer:
| Művelet | Mire kell |
|---|---|
setIfAbsent(key, value, ttl) | A createOnce elosztott zárja. Nélküle a zár nem működik. |
increment(key, ttl) | A próbálkozás-napló pontos számlálása, és a bizonylatnapló. |
deleteIfEquals(key, value) | A zár biztonságos felszabadítása (csak a saját zárát törli). |
A Redis alapú adapterek ezeket Lua szkripttel valósítják meg, ha a kliens tud eval-t. A Cloudflare KV erre nem alkalmas, mert nincs benne atomikus írás: zárhoz és naplóhoz Workers alatt a Durable Object tárolót használd.
Durable Object tároló (Cloudflare Workers)#
A Durable Object egyszerre egy kérést dolgoz fel, ezért a műveletei atomikusak. A lejárt kulcsokat olvasáskor törli.
Hibatűrés#
Az adapterek alapból hibatűrők: ha a get, set vagy delete nem sikerül, a kérés munkamenet nélkül folytatódik, és az onError (vagy a konzol) kap jelzést. Az atomikus műveletek hibáját viszont továbbadják, mert ezekről a kassza dönt (például a zárnál store_unavailable hibát dob). Ha minden hibát a kasszára bíznál, hozd létre az adaptert resilient: false beállítással.
Melyik tároló mire jó?#
A diagnoseStore() egy ideiglenes kulccsal kipróbálja az írást, olvasást, törlést és az atomikus műveleteket, majd megmondja, hogy a tároló alkalmas-e munkamenetre, próbálkozás-naplóra, zárra, bizonylatnaplóra és ismétlés-szűrőre. A kulcsot a végén törli.