Hızlı Özet (TL;DR)
Bilgisayar bilimlerindeki en zor iki problemden biri “önbellek geçersiz kılma” (Cache Invalidation) işlemidir. Redis; bellek içi (In-Memory) çalışan, mikrosaniye seviyesinde okuma/yazma hızları sunan bir anahtar-değer deposudur. Veritabanını korumak için en yaygın model Cache-Aside desenidir. Ancak önbelleğin ne zaman silineceği (TTL ve olay bazlı silme) doğru kurgulanmazsa, kullanıcılar eski (bayat) verilerle çalışmak zorunda kalır.
Önbellekleme Modelleri ve Karşılaştırma
Veri akışına göre tercih edilen önbellekleme stratejileri:
| Desen | Nasıl Çalışır? | Avantajı | Dezavantajı |
|---|---|---|---|
| Cache-Aside (Lazy Loading) | Önce Redis’e bakılır, yoksa veritabanından çekilip Redis’e yazılır | Yalnızca talep edilen veri önbelleğe alınır | İlk sorguda gecikme (Cache Miss) yaşanır |
| Write-Through | Veri önce Redis’e sonra veritabanına aynı anda yazılır | Önbellek her zaman güncel kalır | Her yazma işleminde gecikme artar |
| Write-Behind (Write-Back) | Veri Redis’e yazılır, arka planda asenkron olarak DB’ye aktarılır | Ultra hızlı yazma performansı | Redis çökerse henüz DB’ye yazılmamış veri kaybolabilir |
Cache Invalidation: Önbellek Ne Zaman Silinmeli?
Veritabanında bir satır güncellendiğinde (UPDATE) veya silindiğinde (DELETE), Redis’teki karşılık gelen anahtarın da temizlenmesi gerekir:
- TTL (Time to Live) ile Süreli Yaşam: Her anahtara mantıklı bir yaşam süresi (Örn:
EXPIRE urun:104 3600- 1 saat) tanımlanmalıdır. Bu, sistemde bir hata olsa dahi verinin sonsuza dek bayat kalmasını önleyen emniyet kemeridir. - Olay Bazlı Silme (Event-Driven): Bir ürün fiyatı güncellendiğinde uygulama katmanı anında
redis.del("urun:104")komutunu çalıştırmalıdır.
Cache Stampede (Thundering Herd) Problemini Önleme
Popüler bir ürünün önbellek süresi dolduğu anda aynı milisaniyede gelen binlerce istek aynı anda veritabanına hücum ederse veritabanı kilitlenebilir. Bu krizi önlemek için:
- Rastgele TTL (Jitter): Önbellek sürelerine rastgele birkaç saniye eklenmelidir (
TTL = 3600 + Math.random() * 60). Böylece tüm anahtarlar aynı anda düşmez. - Dağıtık Kilit (Distributed Lock / Redlock): Veritabanına gidecek ilk isteğe kilit verilerek diğer isteklerin o ilk isteğin önbelleği doldurmasını beklemesi sağlanır.
Milyonlarca isteği sorunsuz karşılayan yüksek performanslı web altyapıları için Özel Yazılım Geliştirme ve Web Sayfası Tasarım çözümlerimizden yararlanabilirsiniz.