Merhaba, bugünkü yazımızın konusu Redis. Redis Nedir? Redis’e neden ihtiyaç duyarız? Redis’i nerede nasıl kullanırız?
Redis nedir? Redis giderek popülerliği artan, verileri key value olarak tutan, open source NoSql(Not Only SQL) veritabanıdır. Redis bir çok veri türünü(Json, XML, vb.) destekler. Redis tüm verileri hafızada tutar ve verileri sabit diskte de tutmak istiyorsak Redis bunu da sağlar.
Peki NoSql veritabanı nedir? NoSql veritabanı diğer ilişkisel veritabanlarından farklıdır. Tablo, tablodan tabloya bağlantı, işlem, iç içe sorgu yoktur.
NoSQL veritabanında, verilere erişim, verileri yönetmek için belgeler, grafikler, anahtar değeri, bellekte arama vb. birçok veri modeli vardır.
Bu tür veritabanları özellikle büyük veri hacimleri, düşük gecikme süresi ve esnek veri modelleri gerektiren uygulamalar için optimize edilmiştir.
Bu gereksinimler diğer veritabanlarında veri tutarlığı özelliğinin esnetilmesiyle karşılanır.
Redis’i neden kullanmalıyız?
Redis’in avantajları nelerdir?
- IO işlemini azaltır.
- Senkron çalışabilir.
- CPU kullanımını azaltır.
- Verilere ulaşım çok basittir.
- Çalışma performansı yüksektir.
- Popüler yazılım dillerini desteklemektedir.
- Open source teknoloji olması büyük bir avantaj.
- Yaygın olarak kullanılan veri türleri desteklemektedir.
- Komutlarının kullanımı kolay ve dökümante edilmiştir.
- Cluster Sharing, Sentinel, Replication gibi birçok özelliklere sahiptir.
Redis’in dezavantajları nelerdir?
- Redis asenkron çalışmıyor, tek bir instanceda asenkron alternatiflerin elde ettiği performansa erişemeyebilirsiniz.
- Ram ihtiyacınız veri boyutu ile doğru orantılıdır.
- Veri güvenliği ve veri tutarlılığı için bir kontrol mekanizması yoktur.
- Database işlemlerinde kullanılan sorgulama, transaction vs. mantığı yoktur.
- Bir transaction da hata alırsa geri dönüşü yoktur.
Redis’i nerelerde kullanabiliriz?
- Caching (Önbellekleme) sistemi
- Session (Oturum) sistemi
- Counter (Sayaç)
- Queue (Kuyruk) İşlemi
- Web sayfasını ön belleğe alma
- Veritabanı sorgusu sonuçlarını ön bellekleme,
- Resimler, dosyalar ve meta veriler gibi sık kullanılan nesneleri ön bellekleme
Redis Veri Replikasyonu
Redis, verileri master’dan tüm slave’lere kopyalamayı destekler. Herhangi bir Redis sunucusundaki herhangi bir veri güncellemesi yapıldığında, Redis tüm bağımlı slave nodelara güncel verileri gönderir. Bir slave node diğer slave nodelar için bir master node olabilir. Böylece graph modelleri oluşturabiliriz.
Redis ayrıca yayınla/abone ol özelliğini de destekler. Bu şekilde, slave node bir kanala abone olur ve master node yayınlanan tüm mesajları alır.
Redis Veri Bütünlüğü
Redis tüm verileri hafızada tutar. Redis’in veri bütünlüğünü sağlamak için iki yol vardır. İlk yol “Anlık Görüntü”(Snapshot) olarak adlandırılır. Redis, tüm verileri belirli zamanlarda kopyalar ve daha sonra diske kaydeder.
İkinci yolsa, Redis tüm verileri hafızada tutar ve senkronize olarak diskte saklar. Bu iki yöntemi devre dışı bırakabiliriz.
Bu işlem Redis master nodenun performansını düşürecektir. Başka bir seçenek de bu işlemleri slave nodelar üzerinde çalıştırabilmemizdir.
Redis Güvenlik
Redis, güvenli istemcilerin güvenli bir ağda Redis’e erişimleri için tasarlanmıştır. Redis’in erişim kontrol protokolü yoktur, bunun yerine basit bir kimlik doğrulama protokolü kullanır.
İstemci “AUTH” komutu tarafından sağlanan parolayla kimlik doğrulaması yapar. Parola sistem yöneticisi tarafından belirlenir ve “Redis.conf” dosyasında açık metin olarak saklanır.
Redis, veri şifrelemeyi desteklemediğinden, güvenli istemci redise erişmek için SSL protokolü uygulamalıdır.
Redis, tüm komutların değiştirilmesine izin verir. Komut adını değiştirebiliriz.
Redis güvenlik yerine performansa odaklanır.
Redis Pipelining
İstemci eski yanıtları daha önce okumamış olsa bile yeni istekleri işleyebilmesi için bir İstek / Yanıt sunucusu uygulanabilir. Bu şekilde, yanıtları beklemeden sunucuya birden çok komut göndermek ve son olarak yanıtları tek bir adımda okumak mümkündür.
Buna pipelining denir ve onlarca yıldan beri yaygın olarak kullanılan bir tekniktir. Örneğin, POP3 protokolünü kullanan email uygulamaları bu özelliği destekliyor ve sunucuya yeni e-posta geldiğinde yeni e-postanın indirme işlemini önemli ölçüde hızlandırdı.
Önemli Not: İstemci ardışık düzende istekler gönderirken, sunucu bellek kullanarak yanıtları kuyruğa alır. Bu nedenle, pipelining ile çok sayıda istek göndermeniz gerekiyorsa, bunları makul bir sayıda gruplar halinde göndermek daha iyidir. Örneğin istekleri 10k olarak gönderin ve yanıtları okuyun, ardından tekrar 10k istek gönderin ve yanıtları okuyun. Hız neredeyse aynı olacaktır, ancak kullanılan bellek, bu 10k isteklerin yanıtlarını kuyruğa almak için gereken miktarda olacaktır.
Redis üzerinde beş farklı tipte veri saklayabiliriz. Bu veri tiplerini nedir ve nasıl kullanabiliriz?
- Atomik Transaction
- String
- Temel veri tipidir ve maximum 512 MB string depolar.
- SET & GET
- String eklemek için SET ve çekmek için GET komutları kullanılır.
- GETRANGE anahtar baslangıç bitiş
- GETRANGE komutu ile değer alanındaki verinin belirli bir aralığını almak için kullanılır.
- EXISTS anahtar
- Anahtarın varlığını kontrol eder. Cevap olarak 0 yada 1 döner.
- STRLEN anahtar
- Anahtarların uzunluğunu öğrenmek için STRLEN komutunu kullanılır.
- APPEND anahtar değer
- Anahtarın gösterdiği değerin sonuna değer eklemek için APPEND komutunu kullanılır.
- MSET anahtar1 değer1 anahtar2 değer2 anahtar3 değer3
- Tek satırda birden fazla değer eklemek için kullanılır.
- MGET anahtar1 anahtar2 anahtar3
- Tek satırda birden çok veriyi çekmek için kullanılır.
- DEL anahtar1
- Veri silmek için kullanılır. Anahtar‘i ve değeri siler.
- KEY anahtar*
- anahtar adı ile başlayan anahtarları listeler.
- EXPIRE anahtar minutes
- Eklenen anahtar için zaman aşımı süresini dakika olarak belirlemek için kullanılır.
- RENAME anahtarEskiAdı anahtarYeniAdı
- Anahtar adını değiştirmek için kullanılır.
- Hash
- Birden fazla ilgili anahtarı tek tek eklemek yerine map olarak oluşturabiliriz. Anahtarlar için küçük anahtarlar oluşturur. Böylece verileri blok blok ayırmış oluruz.
- HMSET anahtar gösterge1 “değer1” gösterge2 “değer2”
- Hash oluşturmak için kullanılır.
- HGET anahtar gösterge1
- Hash içerisindeki en küçük anahtarı tuttuğu değere ulaşmak için kullanılır.
- HGETALL anahtar
- Hash içindeki tüm göstergeleri listelemek için kullanılır.
- HDEL anahtar
- Hash’i silmek için kullanılır.
- List
- Verileri liste şeklinde tutmak için kullanılır.
- LPUSH anahtar liste
- Liste oluşturmak ve değer eklemek için kullanılır.
- LRANGE anahtar başlangıç bitiş
- Liste içindeki değerleri listelemek için kullanılır.
- LINDEX anahtar indis
- Liste içerisinde herhangi bir sıradaki değeri çekmek için kullanılır.
- LINSERT anahtar BEFORE/AFTER değer “eklenecekDğer”
- Listede seçilen değerin öncesine veya sonrasına değer eklemek için kullanılır.
- Set
- Küme olarak veri saklamak için kullanılır.
- SADD anahtar değer
- Küme oluşturmak ve değer eklemek için kullanılır.
- SMEMBERS anahtar
- Kümedeki değerleri sıralamak için kullanılır.
- SMOVE anahtar1 anahtar2 değer
- Bir kümede bulunan değrleri diğer kümeye taşımak için kullanılır.
- SDIFF anahtar1 anahtar2
- Bir küme ile diğerini kıyaslamak ve ilk kümede olup ikinci kümede olmayan değerleri listelemek için kullanılır.
- Sorted Set
- Sıralı kümeleri tutmak için kullanılır.
- ZADD anahtar puan değer
- Sıralı bir küme oluşturmak ve değer eklemek için kullanılır.
- ZRANGE anahtar başlangıç bitiş WITHSCORES
- Kümedeki değerleri listelemek için kullanılır. WITHSCORES kullanılarak puan değerleri ile birlikte listelemek için kullanılır.
- ZSCORE anahtar değerAdı
- Değere ait puan bilgisini göstermek için kullanılır.
Redis’i Windows İşletim Sistemiyle nasıl çalıştırabilirim?
Redis windows işletim sisteminde kullanmak istiyorsanız TIKLAYINIZ. Redis indirdikten sonra sıkıştırılmış dosyayı çıkarın. İşletim sisteminize göre 32 veya 64 bit olan dosyayı açarak redis-server.exe dosyasını çalıştırınız. Gerekli olan işletim sistemi iznini verdikten sonra uygulama ayağa kalkmış olacaktır. Aşağıdaki gibi bir ekran ile karşılaşıyor olacaksınız.

Aynı dosya içerisinde redis-cli.exe dosyasını çalıştırıp Redis’i aşağıdaki komutlarla test edebilirsiniz. Redis-cli.exe dosyasını çalıştırdığınızda redis-server.exe “1 clients connected (0 slaves), 1188264 bytes in use” gibi bir çıktı görüyor olacaksınız.
set user1 "caglartelef.com"
get user1
Test komutlarını çalıştırdıktan sonra aşağıdaki gibi bir ekran görüyor olacaksınız.

Spring uygulamasını incelemek ve indirmek için TIKLAYINIZ. Spring uygulamasını ayağa kaldırdıktan sonra tarayıcıdan aşağıdaki url kullanarak ekleme ve getirme işlemlerini yapabilirsiniz.
Eklemek için: http://localhost:8080/redis/set
Çekmek için: http://localhost:8080/redis/get
Redis’in dokümanlarını için TIKLAYINIZ.
Yazımı okuduğunuz için teşekkür ederim. İyi günler 🙂