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.
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 ioredisTemel 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 ioredisconst 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 (
INCRveEXPIREkomutları 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.confiçindemaxmemory-policy allkeys-lruayarlayarak 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.