IHS Strategic
Tüm Blog Yazıları
HowTo09 Eylül 2026•2 dk okuma

Redis ile Veri Önbelleğe Alma ve Oturum Yönetimi Rehberi

Modern web uygulamalarında Redis ile yüksek performanslı veri önbelleğe alma ve güvenli oturum yönetimi uygulama adımları.

S

Sistem Yöneticisi

Kıdemli Yazılım Mimarı

Modern Web Mimarilerinde Redis

Veritabanı darboğazı modern web projelerinde en sık görülen yavaşlık sebebi. Disk I/O yavaş, RAM hızlı. Redis in-memory veri tabanıdır. Okuma/yazma gecikmesini mikrosaniyelere indirir. Bir dijital ajans için yüksek trafikli müşteri sitelerinde sunucu maliyetini düşürmek ve yanıt süresini kesmek için standart araçtır. Güncel trendler, state tutmayan mikroservis mimarilerini ve merkezi Redis oturum depolarını zorunlu kılıyor.

Adım 1: Redis Kurulumu ve Bağlantı

Docker ile en hızlı kurulum:

docker run --name redis-cache -p 6379:6379 -d redis:alpine --requirepass gizlisifre

Uygulama katmanında bağlantı açma (Node.js / ioredis örneği):

const Redis = require('ioredis');
const redis = new Redis({
  host: '127.0.0.1',
  port: 6379,
  password: 'gizlisifre'
});

Adım 2: Cache-Aside (Lazy Loading) Stratejisi

Veri önce Redis'e sorulur. Varsa döner (Cache Hit). Yoksa DB'den okunur, Redis'e yazılır, istemciye iletilir (Cache Miss).

async function getProduct(id) {
  const key = `product:${id}`;
  const cached = await redis.get(key);
  if (cached) return JSON.parse(cached);

  const product = await db.query('SELECT * FROM products WHERE id = ?', [id]);
  if (product) {
    await redis.set(key, JSON.stringify(product), 'EX', 3600); // 1 saat TTL
  }
  return product;
}
Kritik Kural: Asla TTL (Time-to-Live) vermeden anahtar kaydetmeyin. Bellek dolar, OOM (Out Of Memory) hatası oluşur.

Adım 3: Merkezi Oturum (Session) Yönetimi

Monolitik yapılarda oturum bellekte tutulur. Çoklu sunuculu mimarilerde oturum kaybolur. Çözüm: Oturumu Redis üzerinde tutmak.

const session = require('express-session');
const RedisStore = require('connect-redis').default;

app.use(session({
  store: new RedisStore({ client: redis, prefix: 'sess:' }),
  secret: 'guclu-anahtar',
  resave: false,
  saveUninitialized: false,
  cookie: { secure: true, httpOnly: true, maxAge: 86400000 }
}));
  • Sunucu restart olsa bile oturumlar silinmez.
  • Load balancer arkasındaki tüm sunucular aynı oturum verisine erişir.

Adım 4: Cache Invalidation (Önbellek Geçersiz Kılma)

DB güncellendiğinde önbellek temizlenmeli. İki yöntem:

  • Aktif Silme: Kayıt güncellendiğinde redis.del(`product:${id}`) tetiklenir.
  • Write-Through: DB güncellenirken eşzamanlı olarak Redis de güncellenir.

Performans ve Bellek Optimizasyon İpuçları

  • Eviction Policy: maxmemory-policy allkeys-lru ayarla. Bellek dolduğunda en az kullanılan anahtarları otomatik siler.
  • Key İsimlendirme: Standart namespace kullan: app:modul:id (Örnek: ecom:user:42).
  • Büyük Veri Paketleri: 1 MB üzeri nesneleri doğrudan Redis'e atma. Parçala veya sıkıştır.