Redis ile Veri Önbelleğe Alma (Caching) ve Oturum Yönetimi Rehberi
Redis kullanarak veri önbellekleme ve merkezi oturum yönetimi uygulama adımları. Modern web mimarilerinde performans artırma, mimari trendler ve dijital strateji pratikleri.
Sistem Yöneticisi
Kıdemli Yazılım Mimarı
Giriş: Neden Redis?
Veritabanı yükü yüksek sistemlerde disk I/O darboğaz yaratır. Redis, veriyi RAM üzerinde tutar. Okuma ve yazma işlemlerinde mikrosaniye düzeyinde gecikme sunar. Modern bir dijital strateji için yüksek trafikli sistemlerde Redis önbellekleme ve oturum yönetimi standart çözümdür.
1. Veri Önbelleğe Alma (Caching) Stratejileri
Doğru strateji, veri tutarlılığı ve performans dengesini belirler:
- Cache-Aside (Lazy Loading): Uygulama önce Redis'e bakar. Veri yoksa (cache miss) veritabanından çeker, Redis'e yazar ve döndürür. En yaygın modeldir.
- Write-Through: Veri önce cache'e, ardından eşzamanlı veritabanına yazılır. Veri tutarlılığı yüksektir.
- Write-Behind (Write-Back): Veri cache'e yazılır, veritabanına asenkron aktarılır. Yazma hızı maksimumdur ancak veri kaybı riski taşır.
2. Adım Adım Cache-Aside Uygulaması
En temel ve güvenli önbellekleme mantığı:
async function getProduct(productId) {
const cacheKey = `product:${productId}`;
const cached = await redis.get(cacheKey);
if (cached) return JSON.parse(cached);
const product = await db.products.findById(productId);
if (product) {
await redis.set(cacheKey, JSON.stringify(product), 'EX', 3600); // 1 saat TTL
}
return product;
}Kritik Kural: Tüm anahtarlara kesinlikle TTL (Time to Live) verin. Süresiz anahtarlar bellek şişmesine (OOM) yol açar.
3. Dağıtık Oturum (Session) Yönetimi
Çoklu sunucu mimarisinde (load-balanced) sticky session yerine merkezi Redis oturum deposu kullanılır. Sunuculardan biri çöktüğünde kullanıcı oturumu kaybolmaz.
Uygulama Adımları
- Kullanıcı giriş yaptığında oturum verisini (UserID, Rol, Metadata) benzersiz bir `sessionId` ile Redis'e kaydedin.
- `sessionId` değerini HTTP-only, Secure cookie olarak istemciye iletin.
- Gelen her istekte middleware aracılığıyla `sessionId` değerini Redis'te doğrulayın ve TTL süresini yenileyin (Sliding Expiration).
- Kullanıcı çıkış yaptığında `redis.del("session:" + sessionId)` çalıştırarak anında geçersiz kılın.
4. Performans ve Trendler: Mimari İpuçları
- Eviction Policy: RAM dolduğunda Redis'in davranışını belirleyin. `maxmemory-policy allkeys-lru` veya `volatile-lru` seçin.
- Cache Stampede Önleme: Popüler bir anahtarın TTL süresi bittiğinde aynı anda binlerce isteğin veritabanına vurmasını engellemek için mutex/lock (ör. Redlock) veya asenkron yenileme kullanın.
- Key İsimlendirme Standardı: Tutarlılık için `[servis]:[nesne]:[id]` formatını izleyin (ör. `auth:session:usr_9921`).