Aynı veriyi her istekte veritabanından tekrar tekrar okumak hem yavaş hem maliyetlidir. Önbellekleme (caching), sık kullanılan verilerin hızlı erişilebilen bir yerde geçici olarak tutulmasıdır. Redis, bu iş için en yaygın kullanılan bellek içi veri depolarından biridir.
Ne zaman önbellek kullanılır?
- Sık okunan ama seyrek değişen veriler: kategori listeleri, ayarlar, fiyat listeleri.
- Hesaplaması pahalı sonuçlar: raporlar, özetler.
- Dış API yanıtları: döviz kuru, kargo fiyatı gibi.
- Oturum bilgileri ve kısa ömürlü kodlar.
Önbellek türleri
- Bellek içi (in-memory): Uygulamanın kendi belleğinde. En hızlısıdır; ama birden fazla sunucuda her biri ayrı önbellek tutar.
- Dağıtık önbellek: Redis gibi ayrı bir sunucuda. Tüm uygulama örnekleri aynı önbelleği paylaşır.
- Karma: Önce yerel bellek, sonra dağıtık önbellek.
.NET'te HybridCache
.NET 9 ile gelen HybridCache, yerel bellek ve dağıtık önbelleği birlikte kullanan, aynı anahtar için gelen eşzamanlı istekleri tek bir veritabanı çağrısına indiren bir API sunar:
var urunler = await cache.GetOrCreateAsync("kategori:12:urunler",
async ct => await db.UrunleriGetirAsync(12, ct),
new HybridCacheEntryOptions { Expiration = TimeSpan.FromMinutes(10) });
Önbellek geçersizleştirme
Bilgisayar biliminin en zor problemlerinden biri olarak anılır: veri değiştiğinde önbellek ne zaman güncellenecek?
- Süre tabanlı: Belirli süre sonra kendiliğinden düşer. Basittir.
- Olay tabanlı: Veri güncellendiğinde ilgili anahtar silinir.
- Etiket tabanlı: İlgili kayıtlar bir etiketle gruplanıp birlikte silinir.
Fiyat ve stok gibi kritik verilerde eskimiş veri gösterme riskini dikkatle değerlendirin.
Redis'in diğer kullanımları
- Mesaj kuyrukları ve yayın/abonelik
- Sayaçlar ve sıralamalar
- Dağıtık kilitler
- Rate limiting sayaçları
Lisans notu
Redis'in lisans modeli 2024'te değişti ve sonraki sürümlerde yeniden güncellendi. Bu süreçte topluluk tarafından açık kaynak lisanslı alternatifler (örneğin Valkey) de ortaya çıktı. Redis'i kendi sunucunuzda veya bir hizmet olarak kullanırken, kullandığınız sürümün lisansının ticari kullanım ve dağıtım senaryonuza uygun olduğunu kontrol edin. Yönetilen bulut hizmetlerinde lisans genellikle sağlayıcının sorumluluğundadır.
Sık sorulan sorular
Her projeye Redis gerekir mi?
Hayır. Tek sunuculu çoğu uygulama için bellek içi önbellek yeterlidir. Dağıtık yapı veya ortak durum gerektiğinde Redis değerlendirilir.
Önbellekte kişisel veri tutulabilir mi?
Tutulabilir; ancak süre sınırı, erişim kontrolü ve şifreleme gibi önlemler KVKK açısından da düşünülmelidir.
Sonuç
Doğru yerde kullanılan önbellek, uygulamayı birkaç kat hızlandırabilir. Performans iyileştirmeleri için ASP.NET Core performans yazımıza da göz atabilirsiniz.