Redis, açık kaynaklı, in-memory veri yapısı deposu olarak web uygulamalarında performans optimizasyonunun temel taşlarından biridir. Saniyede milyonlarca işlem kapasitesi ve mikrosaniye seviyesinde gecikme süreleriyle, modern uygulamaların vazgeçilmez bileşeni haline gelmiştir.
Redis Nedir?
Redis (Remote Dictionary Server), bellek içi (in-memory) çalışan bir NoSQL veritabanıdır. Temel olarak key-value store olarak tasarlanmış olsa da, zengin veri yapıları desteğiyle çok yönlü kullanım senaryolarına olanak tanır.
Redis Veri Yapıları
- Strings: En temel veri tipi, metin veya binary veri
- Lists: Sıralı string koleksiyonları, kuyruk yapıları için ideal
- Sets: Benzersiz string koleksiyonları, üyelik kontrolü
- Sorted Sets: Skor ile sıralanmış setler, liderlik tabloları
- Hashes: Field-value çiftleri, nesne depolama
- Streams: Log benzeri veri yapıları, event sourcing
- Bitmaps: Bit seviyesinde operasyonlar, kullanıcı aktivite takibi
Caching Stratejileri
1. Cache-Aside (Lazy Loading)
En yaygın strateji. Veri önce cache'te aranır, yoksa veritabanından çekilir ve cache'e yazılır.
// Pseudo kod
data = redis.get(key)
if data is null:
data = database.query()
redis.setex(key, ttl, data)
return data
2. Write-Through
Veri hem veritabanına hem cache'e aynı anda yazılır. Tutarlılık garantisi sağlar.
3. Write-Behind (Write-Back)
Veri önce cache'e yazılır, ardından asenkron olarak veritabanına aktarılır. Yazma performansı yüksek.
4. Refresh-Ahead
Sık erişilen verileri TTL dolmadan önce proaktif olarak yeniler.
Kullanım Senaryoları
Session Yönetimi
Web uygulamalarında oturum verilerinin depolanması. Hızlı erişim ve kolay ölçekleme.
Rate Limiting
API çağrı sınırlandırma. INCR ve EXPIRE komutlarıyla sliding window implementasyonu.
Gerçek Zamanlı Liderlik Tabloları
Sorted Sets ile oyun ve yarışma sıralamaları. O(log(N)) karmaşıklıkla sıralama.
Pub/Sub Mesajlaşma
Gerçek zamanlı bildirimler ve event broadcasting. WebSocket backend'i olarak kullanım.
Full-Page Caching
Statik veya yarı-statik sayfaların tam olarak cache'lenmesi.
Redis Cluster ve Yüksek Erişilebilirlik
- Redis Sentinel: Otomatik failover ve monitoring
- Redis Cluster: Yatay ölçekleme, data sharding
- Replication: Master-replica yapılandırması
Performans İpuçları
- Uygun TTL değerleri belirleyin
- Key naming convention oluşturun
- Pipeline kullanarak batch işlemler yapın
- Büyük key'lerden kaçının (memory fragmentation)
- Lazy expiration yerine aktif expiration tercih edin
- Memory policy'leri doğru yapılandırın (maxmemory-policy)
Laravel/PHP ile Redis
// Cache facade
Cache::store('redis')->put('key', 'value', 600);
$value = Cache::store('redis')->get('key');
// Redis facade
Redis::set('key', 'value');
Redis::expire('key', 600);
Monitoring ve Debugging
- Redis CLI: redis-cli monitor, info stats
- RedisInsight: GUI monitoring tool
- APM entegrasyonları: New Relic, Datadog
Redis, doğru kullanıldığında uygulama performansını dramatik şekilde artırabilir. Cache stratejinizi iş gereksinimlerinize göre belirleyin ve düzenli olarak cache hit ratio'nuzu izleyin.