# Cloudflare Workers + KV ile edge cache kurarsam invalidation'ı nasıl yaparım?

> Fiyat değiştiği an aynı transaction ya da outbox içinde KV'ye write-through yapın veya key'i silin; kısa TTL ve versiyonlu key yalnızca emniyet ağıdır.

- Soruldu: 2026-05-08
- Yanıtlandı: 2026-05-11
- Soran: Tolga
- Etiketler: altyapi, cloudflare, caching
- Kaynak: https://muhammetsafak.com/tr/sor-bakalim/cloudflare-workers-kv-ile-edge-cache-ve-invalidation/
- Dil: tr-TR
- Yazar: Muhammet Şafak

---
**Soru:** API'ımın bazı uçları (örn. dinamik fiyat listeleri) sık değişmiyor ama kullanıcıya en yakın lokasyondan çok hızlı dönmeli. Tüm trafiği origin'e (EC2) indirmek yerine Cloudflare Workers ile istekleri edge'de karşılayıp KV'de önbelleğe almak istiyorum.

Cache invalidation'ı nasıl kurmalıyım ki origin'de fiyat değişince edge anında güncellensin?


Kısa cevap: Sadece TTL'e güvenmeyin — TTL eventual'dır ve süre dolana kadar **eski fiyatı** servis eder. Invalidation'ı push-based ve event-driven kurun.

## Kısa cevap

Sizin senaryonuzda kabul edilemez olan şey "yanlış fiyat" penceresi. Çözüm, değişikliği edge'e beklemeye bırakmak değil, itmek. Bu, önbelleği bir hız katmanı olarak görüp doğruluk kaynağını origin'de tutan klasik bir [backend mimarisi](/tr/uzmanlik/backend/) kararıdır.

## Neden

1. **TTL bir invalidation mekanizması değil, bir eskime sınırıdır.** Süre dolana kadar edge eski değeri servis etmeye devam eder; para etkileyen veride bu pencere kabul edilemez.

2. **KV kaynak değil, cache'tir.** Doğruluk kaynağınız origin DB'dir; KV onun hızlı bir kopyasıdır. Bu zihniyet, KV bozulduğunda ya da tutarsız kaldığında origin'den yeniden besleyebilmenizi sağlar.

3. **KV global olarak eventual consistent'tır.** Yazımlar dünyaya yayılırken 60 saniye ya da daha uzun sürebilir; küçük bir tutarsızlık penceresi kaçınılmazdır. Anlık global doğruluk gerekiyorsa KV yanlış katmandır.

## Ne yapmalı

1. **Değişiklikte write-through (veya purge) yapın.** Origin'de fiyat değiştiği anda, aynı transaction/outbox içinde Cloudflare API'ına çağrı atıp yeni değeri KV'ye yazın ya da key'i silin. Böylece güncelleme yazma işleminin parçası olur, ayrı bir "umarım çalışır" adımı değil.

2. **Key'i entity+version ile kurun.** Her değeri bir versiyonla damgalayın (`price:42:v7` gibi). Worker eski versiyonu görürse **serve-stale-while-revalidate** yapıp arkada güncelleyebilir.

3. **Kısa TTL'i emniyet ağı olarak bırakın.** Push invalidation bir sebeple kaçarsa, kısa TTL en kötü ihtimalle eskiliği birkaç saniyeyle sınırlar. TTL tek savunma değil, son savunma olsun.

**Sonuç:** Ben olsam **değişiklikte write-through (ya da purge) + kısa TTL emniyet ağı + versiyonlu key** üçlüsünü kurardım. TTL-only çözüm fiyat gibi para etkileyen veride yanlış; push-based invalidation ile origin değiştiği an edge güncellenir. KV'nin saniyelik yayılma penceresini bilerek tasarlayın — onu kaynak değil, hızlı ve tazelenebilir bir cache olarak kullanın.

## İlgili Yazılar

- [API sunucumu Cloudflare Tunnel arkasına alıp 443'ü internete kapatmalı mıyım?](https://muhammetsafak.com/tr/sor-bakalim/api-sunucusunu-cloudflare-tunnel-arkasina-mi-almali/) — Sor Bakalım
- [CI/CD'de OIDC ve IAM Role ile şifresiz (secretless) AWS erişimini nasıl kurarım?](https://muhammetsafak.com/tr/sor-bakalim/ci-cd-de-secret-yonetimi-ve-oidc-ile-sifresiz-erisim/) — Sor Bakalım
- [Docker imaj boyutunu multi-stage build ve distroless ile nasıl küçültürüm?](https://muhammetsafak.com/tr/sor-bakalim/docker-imaj-boyutunu-multi-stage-ve-distroless-ile-kucultmek/) — Sor Bakalım
