Redis ile Veri Önbelleğe Alma ve Oturum Yönetimi Rehberi
Modern web uygulamalarında DB darboğazlarını çözmek için Redis ile veri önbelleğe alma ve dağıtık oturum yönetimi uygulama adımları.
Sistem Yöneticisi
Kıdemli Yazılım Mimarı
Giriş: Neden Redis?
Veritabanı disk I/O yavaştır. Redis veriyi RAM üzerinde tutar. Okuma ve yazma mikrosaniye sürer. Modern web mimarilerinde dijital ajans projeleri ve yüksek trafikli sistemler bu mimariyi zorunlu kılar. Bu rehber, veri önbellekleme (caching) ve session store kurulumunu adım adım gösterir.
Adım 1: Redis Servisini Başlatma
En hızlı yol Docker kullanmaktır:
docker run --name redis-cache -p 6379:6379 -d redis:alpine --save "" --appendonly noRAM odaklı cache için persistence kapatıldı. Session veri kaybı kritikse AOF (appendonly yes) aç.
Adım 2: Cache-Aside (Lazy Loading) Stratejisi
En yaygın cache paterni. DB sorgulamadan önce Redis kontrol edilir.
Uygulama Mantığı (Node.js / ioredis):
import Redis from 'ioredis';
const redis = new Redis();
async function getUser(id) {
const key = `user:${id}`;
const cached = await redis.get(key);
if (cached) return JSON.parse(cached);
const user = await db.users.findById(id);
if (user) {
await redis.set(key, JSON.stringify(user), 'EX', 3600); // 1 saat TTL
}
return user;
}- TTL (Time-to-Live): Zorunludur. TTL verilmezse bellek dolar (OOM).
- Key Formatı:
nesne:idveyaservis:alan:idstandardı kullan.
Adım 3: Dağıtık Oturum (Session) Yönetimi
Monolitik sunucu içi session bellek paylaşımı yapamaz. Yatay ölçeklemede (load balancer arkası) kullanıcı oturumu kaybolur. Redis merkezi session store olur.
Express + Redis Session Entegrasyonu:
import session from 'express-session';
import RedisStore from 'connect-redis';
import Redis from 'ioredis';
const client = new Redis();
app.use(session({
store: new RedisStore({ client }),
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: { secure: true, httpOnly: true, maxAge: 86400000 }
}));Adım 4: Kritik Optimizasyon ve Trendler
Gelişen trendler doğrultusunda dikkat edilmesi gereken kurallar:
- Cache Stampede: TTL bittiğinde aynı anda gelen binlerce istek DB'yi çökertir. Çözüm: Mutex lock veya Probabilistic Early Expiration (XFetch).
- Eviction Policy:
redis.confiçindemaxmemory-policy allkeys-lruveyavolatile-lruayarla. RAM dolunca eski veri düşer, sistem çökmez. - Boru Hattı (Pipelining): Çoklu sorguları tek round-trip ile gönder. Ağ gecikmesini sıfırla.