Redis Nedir? Tanımı, Nasıl Çalışır ve Kullanım Alanları
Redis, verileri RAM (bellek) içinde depolayan, açık kaynak kodlu, yüksek performanslı bellek tabanlı veri tabanı yönetim sistemidir. REmote DIctionary Server adının kısaltması olan Redis, inanılmaz hız ve düşük gecikme süresi ile milyonlarca işlemi saniyede tamamlayabilir.
Redis, verileri RAM (bellek) içinde depolayan, açık kaynak kodlu, yüksek performanslı bellek tabanlı veri tabanı yönetim sistemidir. REmote DIctionary Server adının kısaltması olan Redis, inanılmaz hız ve düşük gecikme süresi ile milyonlarca işlemi saniyede tamamlayabilir. Geleneksel disk tabanlı veri tabanlarından farklı olarak, veriler doğrudan işlemci belleğinde tutulduğu için erişim hızı binlerce kat daha hızlıdır.
Redis Nasıl Çalışır?
Redis, istemci-sunucu mimarisine dayalı çalışır. Bir Redis sunucusu başlatıldığında bellek içinde bir hash tablosu oluşturur. Veriler anahtar-değer (key-value) çiftleri şeklinde saklanır. Örneğin, "kullanici_1" anahtarı "Ahmet" değerini içerebilir.
İstemci (client) bir komut gönderdiğinde, Redis bu komutu işler ve sonucu anında döndürür. RESP (REdis Serialization Protocol) protokolü kullanarak haberleşme yapılır. Tüm işlemler tek bir iş parçacığında (single-threaded) gerçekleşir, bu da veri tutarlılığını garantiler.
Veri güvenliği açısından, Redis verilen aralıklarla verileri diske kaydedebilir. RDB (Redis Database) yöntemi ile belirli zamanlarda disk dosyası oluşturur veya AOF (Append-Only File) yöntemi ile her işlemi kayıt altına alır.
Redis'in Veri Yapıları
- String: Basit metin veya sayı değerler. Sabit komut sayısı ile hızlı işlem.
- Liste (List): Sıralı koleksiyon. Kuyruk ve yığın işlemleri için idealdir.
- Küme (Set): Tekil ve sırasız eleman koleksiyonu. Topluluk analizi için uygun.
- Sıralı Küme (Sorted Set): Elemanlar puanla sıralandığı kümeler. Liderlik tabloları için faydalı.
- Hash: Nesne benzeri yapı. Birden fazla alanı olan verileri depolamak için kullanılır.
- Stream: Zaman serisi veri akışı. Olayları sırası ile kayıt altına alır.
- HyperLogLog: Benzersiz elemanların sayısını tahmin eder. Hafif ve hızlı istatistik için.
- Bitmap: Bitler üzerinde işlem yapılan veri yapısı. Küçük alan kullanımı ile verimli.
Redis'in Avantajları
- Muazza Hız: Bellek işlemleri disk işlemlerinden milyon kat daha hızlıdır. Genellikle 1 milisaniyelik yanıt süresi elde edilir.
- Basit Kullanım: Kurulumu kolay ve basit komutlarla işlem yapılır. Öğrenme eğrisi düştür.
- Çoklu Veri Yapıları: String, liste, küme gibi sekiz farklı veri yapısı destekler, çeşitli durumlar için uygun.
- Atomik İşlemler: Transaksiyonlar tek adımda tamamlanır. Veri tutarlılığı garantilenir.
- Pub/Sub Sistemi: Yayın-abone modeli ile gerçek zamanlı haberleşme sağlar.
- Açık Kaynak: Bedava ve kod kaynağı açıktır. Geniş komunite desteği vardır.
- Dayanıklılık: AOF ve RDB ile verileri diske kaydedebilir. Sunucu kapanırsa veri kaybı yaşanmaz.
Redis'in Dezavantajları
- Bellek Kısıtlaması: Veriler bellek içinde tutulduğu için veri hacmi sunucunun RAM'i ile sınırlıdır.
- Tek İş Parçacığı: Çok çekirdekli işlemcilerin tüm gücünü kullanamaz.
- Yapılandırılmamış Sorgu: SQL gibi karmaşık sorguları doğrudan çalıştıramaz.
- Veri Modelleme Zorluk: Karmaşık ilişkisel veri modellemeleri zordur.
- Yüksek Bellek Maliyeti: Aynı veriyi tutmak için disk tabanlı veri tabanına göre çok daha fazla bellek gerekir.
Redis Nerede Kullanılır?
| Kullanım Alanı | Açıklama | Örnek |
|---|---|---|
| Önbellek (Cache) | Sık kullanılan verileri bellek içinde tutar. Veritabanı yükünü azaltır. | Web sayfası içeriği, API yanıtları, kullanıcı profilleri |
| Oturum Yönetimi | Giriş yapan kullanıcı bilgilerini depolayan sistem. | Login bilgisi, token, kullanıcı tercihleri |
| Gerçek Zamanlı Analitik | Canlı veri işleme ve anında istatistik hesaplaması. | Ziyaretçi sayımı, tıklama analizi, hizmet metrikleri |
| Sıra (Queue) Sistemi | İşleri sırasıyla işlemek için kullanılan yapı. | E-posta gönderme, görüntü işleme, raporlama |
| Pub/Sub (Yayın-Abone) | Gerçek zamanlı mesaj dağıtımı sistemi. | Chat uygulamaları, bildirim sistemleri, canlı güncellemeler |
| Liderlik Tabloları | Sıralı veriler ile rekabet puanlaması. | Oyun puanları, müşteri sıralaması, satış tabloları |
| Hız Sınırlama (Rate Limiting) | Belirli zaman içinde istek sayısını kontrol etme. | API çağrı limitleri, DDoS koruması |
| Dağıtık Kilit (Distributed Lock) | Birden fazla sunucu arasında erişim kontrolü. | Eşzamanlı işlem yönetimi, veri tutarlılığı |
Redis Türleri ve Dağıtık Mimarisi
Tekil Redis: Tek bir sunucuda çalışan basit kurulum. Geliştirme ve test ortamları için uygun, ancak üretim ortamında yedekleme yoktur.
Redis Sentinel: Birden fazla Redis sunucusu çalıştırır ve ana sunucu çökerse otomatik olarak yedek sunucuya geçiş yapar. Yüksek erişilebilirlik için kullanılır.
Redis Cluster: Verileri birden fazla düğüm (node) arasında bölüştürür. Büyük veri setleri ve yüksek yazma/okuma işlemleri için ölçeklenebilir çözüm sunar.
Redis'in Tarihçesi
Redis, 2009 yılında İtalyan yazılımcı Salvatore Sanfilippo tarafından yaratılmıştır. Başlangıçta bir şirketi hızlandırmak için kişisel proje olarak geliştirilmiştir. 2010 yılında açık kaynak olarak duyurulmuştur.
O zamandan beri Redis, başta e-ticaret, sosyal medya ve finans sektörü olmak üzere, dünyanın en büyük şirketleri tarafından kullanılmaktadır. Her yıl yeni özellikler eklenerek güncellenmektedir.
"Redis, ağır ve yavaş veri tabanlarından kurtulmak isteyen geliştiriciler için hayat kurtarıcı olmuştur."
Redis vs Diğer Teknolojiler
| Özellik | Redis | Memcached | PostgreSQL | MongoDB |
|---|---|---|---|---|
| Hız | Çok Hızlı | Hızlı | Orta | Orta-Hızlı |
| Veri Yapıları | 8 Farklı | Sadece String | Tablolar | Belgeler |
| Dayanıklılık | AOF/RDB Evet | Hayır | Evet | Evet |
| Kullanım | Önbellek + Veri Tabanı | Sadece Önbellek | Tam Veri Tabanı | Belge Veri Tabanı |
| Sorgu Dili | Komut Tabanlı | Komut Tabanlı | SQL | MongoDB Query |