Modern Web için Redis Rehberi: Veri Önbellekleme ve Oturum Yönetimi
Modern web uygulamalarında Redis ile veri önbellekleme (caching) ve merkezi oturum (session) mimarisi kurma adımları. Dijital ajanslar ve mühendisler için pratik performans rehberi.
Sistem Yöneticisi
Kıdemli Yazılım Mimarı
Modern Web Mimarilerinde Redis Rolü
Veritabanı I/O maliyeti yüksektir. Yüksek trafikli modern web uygulamalarında disk tabanlı okumalar darboğaz yaratır. Redis, veriyi RAM üzerinde key-value formatında tutar; sub-millisecond yanıt süresi sağlar. Dijital ajans projelerinde ve kurumsal platformlarda ölçeklenebilirlik trendleri, durumsuz (stateless) uygulama sunucuları ve merkezi Redis katmanını zorunlu kılar.
Adım 1: Redis Kurulumu ve Memory Ayarları
Docker ile hızlı kurulum:
docker run -d --name redis-core -p 6379:6379 redis:7-alpine redis-server --maxmemory 512mb --maxmemory-policy allkeys-lruKritik Parametre: allkeys-lru politikası bellek dolduğunda en az kullanılan anahtarları otomatik siler. OOM (Out Of Memory) çökmesini engeller.Adım 2: Cache-Aside (Lazy Loading) Stratejisi Uygulama
En yaygın önbellekleme deseni Cache-Aside modelidir. Akış: Uygulama önce Redis'e bakar. Veri varsa döner (Cache Hit). Yoksa veritabanından okur, Redis'e yazar, yanıtı döner (Cache Miss).
async function getUserProfile(userId) {
const cacheKey = `user:${userId}`;
const cached = await redis.get(cacheKey);
if (cached) return JSON.parse(cached);
const user = await db.users.findById(userId);
if (!user) return null;
await redis.set(cacheKey, JSON.stringify(user), 'EX', 3600); // 1 saat TTL
return user;
}Adım 3: Dağıtık Oturum (Session) Yönetimi
Birden fazla web sunucusu (load balancer arkasında) çalıştığında yerel oturum belleği yetersiz kalır. Sticky session kullanmak yerine merkezi Redis session store kurulmalıdır.
- Token/Session ID: Cookie veya Header içinde taşınır.
- Session Verisi: Redis üzerinde TTL ile saklanır.
- Kullanıcı Çıkışı (Logout): Tek bir
DEL session:{id}komutu ile tüm sunucularda anında geçersiz kılınır.
// Session kayıt örneği
await redis.set(`session:${sessionId}`, JSON.stringify({ userId: 42, role: 'admin' }), 'EX', 86400);Önemli Trendler ve Optimizasyon Kuralları
- Cache Invalidation: Veri güncellendiğinde (UPDATE/DELETE) ilgili Redis anahtarı silinmeli veya güncellenmelidir (Write-Through / Cache Eviction).
- Key İsimlendirme Standardı:
nesne:id:alanhiyerarşisi kullanın (Örn:order:1024:items). - Connection Pooling: Her istekte yeni bağlantı açmayın; tek bağlantı havuzunu (connection pool) yeniden kullanın.
- Hot-key Problemi: Çok yoğun okunan anahtarlar için local in-memory L1 cache (LRU) + Redis L2 cache hibrit mimarisini değerlendirin.