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 mimarisinde Redis ile önbellekleme ve oturum yönetimi adımları. Veritabanı yükünü azaltma, TTL yönetimi ve pratik kod örnekleri.

S

Sistem Yöneticisi

Kıdemli Yazılım Mimarı

Redis Nedir ve Neden Kullanılır?

Redis, bellek içi (in-memory) anahtar-değer veri deposudur. Disk I/O yerine RAM kullanır. Milisaniye altı gecikme sağlar. Modern web projelerinde birincil veritabanı yükünü hafifletir, yatay ölçeklemeyi mümkün kılar.

Geleneksel ilişkisel veritabanları eşzamanlı oturum ve sık tekrarlanan sorgularda kilitlenir. Redis bu darboğazı ortadan kaldırır.

Adım Adım Veri Önbellekleme (Cache-Aside Pattern)

1. Redis Bağlantısı Kurulumu

Node.js ortamında standart istemci kurulumu:

npm install ioredis

Temel bağlantı kodu:

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

redis.on('error', (err) => console.error('Redis Baglanti Hatasi:', err));

2. Önbellek Okuma ve Yazma Mantığı

Sorgu akışı: Önce Redis kontrol edilir (cache hit). Veri yoksa (cache miss) veritabanından çekilir, Redis'e yazılır ve TTL (yaşam süresi) verilir.

async function getUserProfile(userId) {
  const cacheKey = `user:${userId}:profile`;
  const cached = await redis.get(cacheKey);
  
  if (cached) return JSON.parse(cached);

  // DB sorgusu simülasyonu
  const dbData = await db.users.findById(userId);
  
  // 1 saat (3600 sn) TTL ile kaydet
  await redis.set(cacheKey, JSON.stringify(dbData), 'EX', 3600);
  return dbData;
}

Redis ile Dağıtık Oturum (Session) Yönetimi

Tek sunuculu sistemlerde session bellekte (memory) tutulabilir. Birden fazla sunucu (load balancer arkası) devreye girdiğinde session paylaşımı gerekir. Çözüm: Merkezi Redis session store.

Express.js ve Redis Session Entegrasyonu

npm install express-session connect-redis ioredis
const session = require('express-session');
const RedisStore = require('connect-redis').default;
const Redis = require('ioredis');

const redisClient = new Redis();

app.use(
  session({
    store: new RedisStore({ client: redisClient, prefix: 'sess:' }),
    secret: 'guclu-gizli-anahtar',
    resave: false,
    saveUninitialized: false,
    cookie: {
      secure: process.env.NODE_ENV === 'production',
      httpOnly: true,
      maxAge: 1000 * 60 * 60 * 24 // 1 gün
    }
  })
);

Modern Web ve Dijital Ajans Projelerinde Trendler

Ölçeklenebilir dijital ajans projelerinde Redis sadece basit caching için kullanılmaz. Güncel mimari trendler şunları içerir:

  • Rate Limiting: API endpointlerine yapılan istekleri sınırlayarak DDoS ve spam engelleme (INCR ve EXPIRE komutları ile).
  • Pub/Sub Mesajlaşma: Gerçek zamanlı bildirimler ve mikroservisler arası hızlı veri aktarımı.
  • Cache Invalidation: Veri güncellendiğinde ilgili anahtarların anında silinmesi (Purge stratejileri).

Performans İçin En İyi Pratikler

  • Key İsimlendirme Standardı: Tutarlı yapı kullanın: modul:nesne:id:alan (Örnek: ecommerce:product:42:stock).
  • Mutlaka TTL Kullanın: Sonsuz yaşam süreli anahtarlar RAM şişmesine yol açar.
  • Eviction Policy: redis.conf içinde maxmemory-policy allkeys-lru ayarlayarak bellek dolduğunda en az kullanılan verilerin otomatik temizlenmesini sağlayın.
  • Büyük Değerlerden Kaçının: Tek bir anahtara megabaytlarca veri koymayın, CPU darboğazı yaratır.