Redis Nedir? Bellek İçi Veri Deposuna Kapsamlı Bir Bakış
Redis (REmote DIctionary Server), açık kaynaklı, yüksek performanslı, bellek içi (in-memory) bir veri yapısı deposudur. Genellikle bir veritabanı, önbellek (cache) ve mesaj aracısı (message broker) olarak kullanılır. Hızı ve çok yönlülüğü sayesinde modern uygulamaların vazgeçilmez bir bileşeni haline gelmiştir.
Redis'in Temel Özellikleri
- Bellek İçi Çalışma: Verileri disk yerine RAM'de saklar, bu da milisaniyenin altında yanıt süreleri sağlar.
- Zengin Veri Yapıları: Basit anahtar-değer (key-value) depolarının ötesinde, String, List, Set, Sorted Set, Hash gibi çeşitli veri yapılarını destekler.
- Kalıcılık (Persistence): Verileri periyodik olarak diske yazarak veya her komutu bir log dosyasına ekleyerek kalıcılık sağlayabilir.
- Yüksek Kullanılabilirlik: Redis Sentinel ve Redis Cluster ile otomatik yük devretme (failover) ve yatay ölçeklendirme (horizontal scaling) imkanı sunar.
- Geniş Dil Desteği: Python, Java, C#, Node.js, Go ve daha birçok dil için resmi ve topluluk tarafından geliştirilmiş istemcilere sahiptir.
Temel Redis Veri Yapıları
Redis'in gücü, sunduğu çeşitli veri yapılarından gelir:
- Strings: Metin veya ikili (binary) verileri saklamak için kullanılır. En basit veri yapısıdır.
- Lists: Elemanların eklenme sırasına göre sıralandığı bir koleksiyondur. Kuyruk (queue) veya yığın (stack) oluşturmak için idealdir.
- Sets: Sırasız ve benzersiz elemanlardan oluşan bir koleksiyondur. Etiketleme (tagging) gibi senaryolar için kullanışlıdır.
- Sorted Sets: Set'lere benzer ancak her elemanın bir skoru (score) vardır. Elemanlar bu skora göre sıralanır. Liderlik tabloları (leaderboards) için mükemmeldir.
- Hashes: Alan (field) ve değer (value) çiftlerini içeren bir harita (map) yapısıdır. Nesneleri temsil etmek için kullanılır.
- Streams: Sadece ekleme yapılabilen (append-only), log benzeri bir veri yapısıdır. Zaman serisi verileri veya olay akışları için tasarlanmıştır.
Popüler Redis Komutları
# String işlemleri: Bir kullanıcı adını ayarla ve al
SET user:1:name "Ahmet"
GET user:1:name
# Liste işlemleri: Bir bildirim kuyruğuna eleman ekle ve al
LPUSH notifications "Yeni bir mesajınız var"
RPOP notifications
# Hash işlemleri: Bir kullanıcı nesnesinin alanlarını ayarla ve al
HSET user:1 name "Ahmet" email "[email protected]"
HGET user:1 name
HGETALL user:1
# Set işlemleri: Bir gönderiye etiket ekle ve tüm etiketleri listele
SADD post:123:tags "devops" "cloud" "redis"
SMEMBERS post:123:tags
# Süre sonu belirleme: Bir oturum anahtarını 1 saat sonra sil
SET session:xyz "user_data" EX 3600
Yaygın Redis Kullanım Senaryoları
- Önbellekleme (Caching): Veritabanı veya API'lerden gelen yanıtları önbelleğe alarak uygulama performansını önemli ölçüde artırır.
- Oturum Yönetimi (Session Store): Web uygulamalarında kullanıcı oturum bilgilerini hızlı ve ölçeklenebilir bir şekilde saklamak için kullanılır.
- Gerçek Zamanlı Analitik: Web sitesi ziyaretçi sayaçları, anlık istatistikler gibi gerçek zamanlı verileri tutmak için idealdir.
- Pub/Sub (Yayınla/Abone Ol): Gerçek zamanlı sohbet uygulamaları, bildirim sistemleri gibi senaryolarda mesajlaşma altyapısı olarak kullanılır.
- Hız Sınırlama (Rate Limiting): Belirli bir süre içinde bir kullanıcının veya IP adresinin yapabileceği istek sayısını sınırlamak için kullanılır.
- İş Kuyruğu (Job Queue): Arka planda çalışması gereken görevleri (e-posta gönderme, resim işleme vb.) bir kuyruğa alıp işlemek için kullanılır.
Redis Kalıcılık (Persistence) Seçenekleri
- RDB (Redis Database): Belirli aralıklarla veri setinin anlık görüntüsünü (snapshot) diske kaydeder.
- AOF (Append Only File): Sunucuya gelen her yazma komutunu bir dosyaya ekler. RDB'ye göre daha dayanıklıdır ancak dosya boyutu daha hızlı büyüyebilir.
Sonuç
Redis, sadece basit bir önbellek çözümünden çok daha fazlasıdır. Sunduğu zengin veri yapıları ve esnek kullanım senaryoları ile yüksek performans gerektiren modern uygulamalar için İsviçre çakısı gibidir. İster uygulama hızınızı artırmak, ister gerçek zamanlı bir özellik eklemek, isterse de mikroservisler arasında iletişim kurmak isteyin, Redis muhtemelen ihtiyacınız olan çözümü sunacaktır.