Redis ile Veri Önbelleğe Alma ve Oturum Yönetimi: Modern Web Geliştirme Rehberi
Modern web uygulamalarında Redis ile yüksek performanslı veri önbelleğe alma (caching) ve ölçeklenebilir oturum (session) yönetimi rehberi.
Sistem Yöneticisi
Kıdemli Yazılım Mimarı
Modern Web Mimarilerinde Redis: Temel Avantajlar
Veritabanı disk I/O darboğaz yaratır. Redis RAM üzerinde çalışır, milisaniye altı gecikme sunar. Yüksek trafik alan dijital ajans projelerinde sorgu yükünü düşürür. Oturum verilerini merkezi tutar, yatay ölçekleme sağlar.
Adım 1: Redis Kurulum ve Bağlantı Kurma
Redis sunucu ayağa kaldırılır. Minimal istemci bağlanır:
npm install ioredisconst Redis = require('ioredis');
const redis = new Redis({ host: '127.0.0.1', port: 6379 });
redis.on('error', (err) => console.error('Redis Hata:', err));
// ponytail: Tekil Redis instance. Cluster veya Sentinel ihtiyacı trafik büyüyünce ekle.Adım 2: Veri Önbelleğe Alma (Cache-Aside Deseni)
Veri önce önbellekte aranır. Varsa döndürülür (Cache Hit). Yoksa veritabanından okunur, önbelleğe yazılır ve TTL (yaşam süresi) verilir (Cache Miss).
async function getProduct(productId) {
const cacheKey = `product:${productId}`;
const cachedData = await redis.get(cacheKey);
if (cachedData) {
return JSON.parse(cachedData);
}
const dbData = await db.query('SELECT * FROM products WHERE id = ?', [productId]);
if (dbData) {
await redis.set(cacheKey, JSON.stringify(dbData), 'EX', 3600);
}
return dbData;
}
// skipped: Dog-piling / stampede protection, add when QPS > 1000.Adım 3: Dağıtık Oturum (Session) Yönetimi
Stateless API ve mikroservis trendleri gereği oturumlar tek sunucu belleğinde tutulamaz. Redis merkezi oturum deposu olarak yapılandırılır.
const session = require('express-session');
const RedisStore = require('connect-redis').default;
app.use(session({
store: new RedisStore({ client: redis, prefix: 'sess:' }),
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: {
secure: process.env.NODE_ENV === 'production',
httpOnly: true,
maxAge: 86400000 // 1 gun
}
}));Performans ve Bellek Yönetimi Trendleri
- TTL Zorunluluğu: Tüm anahtarlara son kullanma süresi tanımlanır. Bellek şişmesi önlenir.
- Eviction Policy:
redis.confiçindemaxmemory-policy allkeys-lruveyavolatile-lruayarlanır. - Key Namespacing: Anahtarlar
nesne:id:alan(ör.user:102:profile) formatında adlandırılır. Kolay taranır ve temizlenir.
Uyarı: Hassas kullanıcı verileri şifrelenmeden önbelleğe yazılmaz. Redis default portu dış internete açık bırakılmaz, parola (AUTH) ve TLS zorunlu tutulur.