Cache-aside, write-through ve write-behind caching stratejileri arasındaki fark nedir? Redis ile nasıl uygularsınız?
Cevap
| Strateji | Okuma | Yazma | Artı | Eksi |
|---|---|---|---|---|
| Cache-aside (lazy loading) | Uygulama önce cache'e bakar, yoksa DB'den okuyup cache'e yazar | Uygulama DB'ye yazar, cache'i siler | Basit, yalnızca istenen veri cache'lenir | İlk istek yavaş (cache miss), kısa süreli tutarsızlık |
| Write-through | Cache'ten | Cache ve DB'ye aynı anda yazılır | Cache hep güncel | Yazma gecikmesi artar, hiç okunmayan veri de cache'lenir |
| Write-behind (write-back) | Cache'ten | Önce cache'e, DB'ye asenkron toplu yazılır | Çok hızlı yazma | Cache çökerse veri kaybı riski, karmaşık |
| Read-through | Cache kütüphanesi miss'te DB'den kendisi yükler | - | Uygulama kodu sade | Cache katmanının DB'yi bilmesi gerekir |
Cache-aside örneği (en yaygın)
import json, redis
r = redis.Redis()
def get_product(pid: int) -> dict:
key = f"product:{pid}"
cached = r.get(key)
if cached:
return json.loads(cached)
product = db.fetch_product(pid) # cache miss
r.set(key, json.dumps(product), ex=300) # 5 dk TTL
return product
def update_product(pid: int, data: dict) -> None:
db.update_product(pid, data)
r.delete(f"product:{pid}") # güncelleme yerine silNeden yazmada cache'i güncellemek yerine silmek?
İki eşzamanlı yazma farklı sırayla cache'e ulaşırsa cache'te eski değer kalabilir. Silmek ve bir sonraki okumada yeniden yüklemek bu yarışı büyük ölçüde azaltır. Yine de her key'e TTL koyun; gözden kaçan bir tutarsızlık en fazla TTL kadar yaşar.
Diğer önemli noktalar
- Eviction: bellek dolunca ne silinecek? Cache olarak kullanılan Redis'te genelde
maxmemory-policy allkeys-lruveyaallkeys-lfu. - Neyi cache'lemeli: sık okunan, nadiren değişen, hesaplaması pahalı veri. Kullanıcıya özel hassas veri dikkatle.
- Cache kaynak gerçek (source of truth) değildir; Redis boşalırsa sistem yavaşlamalı ama doğru çalışmalıdır.
- Hit oranını metrik olarak izleyin.
İlgili Sistem Tasarımı soruları
- Mesaj kuyruğu (RabbitMQ, Kafka) ne zaman kullanılır?
- Monolith ile mikroservis mimarisi arasındaki fark nedir? Mikroservislere ne zaman geçilmeli?
- CAP teoremi nedir? Gerçek sistemlerde nasıl yorumlanır?
- Dikey ve yatay ölçekleme arasındaki fark nedir?
- Hangi cache stratejilerini biliyorsunuz?
- REST ile GraphQL arasındaki farklar nelerdir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.