Redis ile Veri Önbelleğe Alma ve Oturum Yönetimi: Modern Web Rehberi
Modern web mimarilerinde Redis kullanarak veri önbellekleme (caching) ve dağıtık oturum (session) yönetimini kurma adımları, performans trendleri ve ajans pratikleri.
Sistem Yöneticisi
Kıdemli Yazılım Mimarı
Modern Web Geliştirmede Redis Mimarisi
Veritabanı darboğazlarını önlemek, TTFB (Time to First Byte) değerini düşürmek ve yatayda ölçeklenen sunucularda state yönetimini sağlamak için bellek içi (in-memory) veri deposu şarttır. Her dijital ajans ve backend mühendisinin benimsediği güncel trendler, I/O yükünü Redis üzerinde toplamayı gerektirir. Bu rehber, cache-aside modelini ve session store entegrasyonunu adım adım uygular.
Adım 1: Redis Sunucu Kurulumu ve Bağlantı
En yalın kurulum Docker üzerindedir. Ek bağımlılık olmadan container başlatın:
docker run -d --name redis-core -p 6379:6379 redis:alpine --requirepass gizlisifreUygulama katmanında singleton bağlantı havuzu açın (Node.js/ioredis örneği):
import Redis from 'ioredis';
export const redis = new Redis({
host: '127.0.0.1',
port: 6379,
password: 'gizlisifre',
lazyConnect: true
});
await redis.connect();Adım 2: Cache-Aside (Lazy Loading) Deseni Kurulumu
Veri önce Redis'e sorulur; yoksa DB'den okunur, Redis'e yazılır ve döndürülür.
async function getCachedData(key, fetcher, ttlSeconds = 300) {
const cached = await redis.get(key);
if (cached) return JSON.parse(cached);
const fresh = await fetcher();
if (fresh) {
await redis.set(key, JSON.stringify(fresh), 'EX', ttlSeconds);
}
return fresh;
}TTL (Time-To-Live) tanımlanmamış anahtarlar bellek şişmesine (OOM) yol açar. Her kayda son kullanma süresi zorunlu tutulmalıdır.
Adım 3: Dağıtık Oturum (Session) Yönetimi
Modern web mimarilerinde birden fazla instance arkasında load balancer çalışır. Kullanıcı state bilgisi sunucu RAM'inde değil, merkezi Redis üzerinde tutulur.
- Session ID Üretimi: Kriptografik rastgele token (UUID v4 / nanoid).
- Yazma:
redis.set(`session:${sessionId}`, JSON.stringify(userData), 'EX', 86400) - Doğrulama Middleware: Gelen HTTP Cookie/Header üzerinden session okunur.
- Yıkım (Logout):
redis.del(`session:${sessionId}`)
Adım 4: Invalidation ve Bellek Tahliye Stratejileri
Veri güncellendiğinde stale cache oluşmaması için write-through veya explicit purge uygulanır:
- Veri Güncelleme: DB UPDATE çalışınca ilgili key silinir (
redis.del(`product:${id}`)). - Eviction Policy: Bellek dolduğunda sistemin kilitlenmemesi için
redis.confiçinde politika seçin:maxmemory-policy volatile-lruveyaallkeys-lru.