Cache-aside, write-through ve write-behind caching stratejileri arasındaki fark nedir? Redis ile nasıl uygularsınız?

Cevap

StratejiOkumaYazmaArtıEksi
Cache-aside (lazy loading)Uygulama önce cache'e bakar, yoksa DB'den okuyup cache'e yazarUygulama DB'ye yazar, cache'i silerBasit, yalnızca istenen veri cache'lenirİlk istek yavaş (cache miss), kısa süreli tutarsızlık
Write-throughCache'tenCache ve DB'ye aynı anda yazılırCache hep güncelYazma 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ı yazmaCache çökerse veri kaybı riski, karmaşık
Read-throughCache kütüphanesi miss'te DB'den kendisi yükler-Uygulama kodu sadeCache 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 sil

Neden 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-lru veya allkeys-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.
  1. Mesaj kuyruğu (RabbitMQ, Kafka) ne zaman kullanılır?ZorSistem TasarımıBackend
  2. Monolith ile mikroservis mimarisi arasındaki fark nedir? Mikroservislere ne zaman geçilmeli?ZorSistem TasarımıBackend
  3. CAP teoremi nedir? Gerçek sistemlerde nasıl yorumlanır?ZorSistem TasarımıBackend
  4. Dikey ve yatay ölçekleme arasındaki fark nedir?KolaySistem TasarımıFull Stack
  5. Hangi cache stratejilerini biliyorsunuz?OrtaSistem TasarımıFull Stack
  6. REST ile GraphQL arasındaki farklar nelerdir?OrtaSistem TasarımıFull Stack

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle