1.Redis Nedir ? Redis vs In-Memory Cache
Redis nedir ? Redis vs Memcached
Merhaba Arkadaşlar ,
Önceki yazımda Cache türlerinden “In-Memory Cache” ten bahsetmiştim ve ASP.NET CORE’da nasıl kullanıldığını anlatmıştım.
Bu yazımda sizlere ;
- Redis (Distributed Cache) Nedir ?
- Nasıl Çalışır ?
- Avantajları ?
- Dezavantajları ?
- Bazı kullanım senaryoları ?
- Redis - In-Memory Cache Karşılaştırması
konularını basitçe anlatmaya çalışacağım.
Daha sonraki yazılarımda ;
2. Chocolatey ile Redis (windows) & Docker Container ile Redis Server Kurulumu
3. ASP.NET CORE’da Redis Kullanımı
konularından bahsedeceğim.
1. Redis Nedir ?
İlk olarak Redis’in basit tanımını yapalım. Remote-Dictionary-Server kelimelerinden oluşan açık kaynaklı ve C dili ile yazılmış , geliştiriciler tarafından en çok kullanılan NoSQL veritabanlarından birisidir.
Redis , bir Distributed Cache yöntemi olduğu için , Cache dataları ayrı bir cache service inde tutulur.
Yazılım geliştiricilere basit bir Key-Value mantığından daha fazlasını vadeder. Diğer rekabetçilerine göre en önemli avantajı güçlü bir “Veri Yapısı”nın olmasıdır.
Twitter, GitHub, Tumblr, Pinterest, Instagram, Hulu, Flickr ve The New York Times gibi büyük şirketler tarafından kullanılmaktadır.
2. Redis nasıl çalışır ?
Verileri disk veya SSD üzerinde depolayan PostgreSQL, Cassandra, MongoDB ve diğer veritabanlarından farklı olarak tüm Redis verileri , sunucunun ana belleğinde tutulur. Disk tabanlı veritabanlarına göre çoğu işlem için diskten veri aktarımına ihtiyaç duymaz. Bu nedenle daha fazla işlemi ve daha hızlı yanıt sürelerini destekler.
Bir milisaniyeden az ortalama okuma ve yazma işlemlerine sahip olağanüstü hızlı performans ve saniye başına milyonlarca işlemi gerçekleştirebilir.
Basit Çalışma mantığı ;
- In-Memory Cache’te olduğu gibi , Uygulamanızda Cache’lemek istediğiniz datayı server’dan çekip daha sonra Redis’e kaydediyorsunuz.
- Daha sonraki isteklerde datayı veritabanından okumak yerine Redis’te olup olmadığına bakıyorsunuz.
- Data eğer Redis’te varsa bu datayı Client’lara dönüyorsunuz.
3. Redis’in Avantajları
1. Güçlü Veri Yapıları
Redis , verileri bellek üzerinde Key-Value olarak tutmaktadır, burada herbir anahtara denk gelen değerler farklı veri yapılarında tutulabilmektedir. Bu veri yapıları; String, List, Hash, Set, Sorted Set, Bitmaps, HyperLogLogs vb.
Neredeyse her türlü veri bellekte saklanabilir.
2. Yüksek Performans
Verileri Disk yerine bellekte tutar , bu sayede disklere erişim ihtiyacını ortadan kaldırarak gecikmeleri önler ve daha az CPU kullanarak verilere erişir.
3. Persistance (Veri Kalıcılığı)
Redis’in verileri bellek üzerinde sakladığından bahsettik , olası bir sunucu kapanması gibi durumlarda veriler silinecektir. Redis bize veri kalıcılığını sağlamak için iki yöntem sunar .
a. Point-intime Snapshots
Belirli zaman aralıkları ile bellek üzerindeki datanın bir kopyası diske kaydedilir. Olası sunucu kesintisi vb. durumlarda diskten tekrar geri dönülebilir.
b. Append Only File (AOF)
Her değişikliği dosyanın sonuna yazarak oluşan veri değişikliklerinin kaydını tutar.
4. Genişletilebilirlik
Redis, açık kaynak projesidir. Redis’in açık standartları temel alması, açık veri biçimlerini desteklemesi sayesinde belirli teknolojiye bağımlı olmazsınız.
5. Replication
Redis , master-slave mimarisini kullanır. Slave dediğimiz yapı master’ın kopyasıdır. Yani master güncellendikçe o da güncellenir. Master’da oluşacak herhangi bir kesinti veya hatada slave, master olarak seçilir ve sistem çalışmaya devam eder.
6. Çoklu Dil Desteği
Redis, belirttiklerim dahil olmak üzere önde gelen çoğu programlama dilini ve protokolü destekler:
Python
Java
PHP
Perl
Go
Ruby
C/C#/C++
JavaScript
Node.js
4. Bazı Dezavantajları
- Asenkron çalışmadığı için tek instance üzerinde, asenkron alternatiflerin eriştiği performansa erişemeyebilirsiniz.
- Veri boyutunuza göre RAM’e ihtiyacınız olur.
- İlişkisel veritabanlarında olduğu gibi kompleks sorguları desteklemez.
- Bir transaction hata alırsa geri dönüşü yoktur.
5. Redis’in Bazı Kullanım Senaryoları
1. Caching Mekanizması
Sıkça kullandığımız verileri sürekli veritabanına ya da diğer kaynaklara gidip çağırmak yerine önbelleğe almak performans açısından pozitif bir kazanım olacaktır.
2. Queues (Kuyruklar)
Redis , tamamlanması belli bir zaman dahilinde olan işleri bir kuyruk yapısına alınmasını ve daha sonra işlenmesini destekler.
3. Session(Oturum) Yönetimi
Uygulamalarımızı kullanırken kullanıcı bilgilerimizi veya diğer yapılara ait verilerimizi “Session”da tutmayı tercih edebiliyoruz. Fakat uygulama büyüdükçe tüm bu Session’ları yönetmek bizi oldukça zahmetli bir yola sürükleyebilir. Redis yardımıyla tüm bunların yönetilebilirliğini daha rahat sağlayabilir ve performans anlamında da olumlu sonuçlar elde edebiliriz.
4. Pub/Sub
Redis 2.0'dan itibaren Pub/Sub mesajlaşma paradigmasını desteklemektedir. Redis’in içinde dahili olarak gelen gayet basit ve kullanışlı bir mesajlaşma sistemidir.
Bir radyo sisteminde yayını yapan ve dinleyen olarak düşünebiliriz. Publisher : Yayımcı , SUBSCRIBER : Dinleyici
Bazı firmalar Redis’in performansı ve kolay kullanımı sebebiyle “RabbitMQ” gibi teknolojileri bırakıp Redis’i kullandıklarını açıklamıştır.
5. Machine Learning
Redis, makine öğrenimi modellerini hızlı bir şekilde oluşturmak, eğitmek ve dağıtmak için hızlı bellek içi veri deposu sunar.
6. Redis ve In-Memory Cache Karşılaştırılması
Hangi çözümün ihtiyaçlarınızı daha iyi karşıladığına karar vermek için gereksinimlerinizi ve her bir yapının size neler sunduğunu iyi bilmeniz gerekiyor.
Redis, daha esnek ve güçlüdür , ancak Memcached bazı amaçlara çok iyi hizmet eder ve bazı durumlarda daha iyi performans sağlar. Memcached, çok iş parçacıklı olması , özellikle büyük verilerle çalışırken bize önemli avantajlar sağlayabilir.
Redis , Network I/O sayılarını ve veri boyutlarını azaltarak vaka senaryolarını hızlandırabilen veri türleri sayesinde veri işlemlerini destekler.
Örneğin ; Bir uygulama geliştirmeye karar verdiniz ve datanızı yönetecek bir önbelleğe ihtiyacınız oldu.
Diyelim ki ; Basitliği, kullanım kolaylığı, kolay kurulumu nedeniyle Memcached’i kullanmayı tercih ettiniz. Uygulama geliştikçe ve bazı test senaryolarından sonra “Veri Türleri”ne ihtiyacınız oldu. Bu durumda Redis’e geçmek durumunda kalabilirsiniz.
Dikkat edilmesi gereken husus ; Redis, Memcached’in yaptığı komutların çoğunu desteklediğinden, geçişle ilgili olarak gerçekleştirmek çok daha kolaydır. Rotayı tersine çevirmiş olsaydık ve Redis’ten Memcached’e geçiş yapmaya karar verseydik, Memcached’in veri türü olmadığından çok daha zor olurdu.
Eğer bir karar vermek söz konusu olduğunda , her şey proje gereksinimlerine bağlı olduğundan , birinin diğerinden daha iyi olduğunu söylemek zor olabilir. Proje sırasında değişiklik ve geçişlerden kaçınmak için artılarını ve eksilerini en baştan düşünmek oldukça önemli.
Bitirirken
Uygulamalarımızdaki yönetilebilirlik ve performans, yerinde kullandığımız teknolojiler kadardır. Redis’te bu teknolojilerden biri , yerinde ve ihtiyaca göre kullanmak bize kalmış.
Bu yazımda basitçe Redis’ten bahsetmeye çalıştım.
Umarım faydalı olmuştur.
Başka bir konuda görüşmek üzere…
Yararlandığım Kaynaklar