
Günümüzde en çok kullanılan anahtar-veri veritabanlarından birisidir. Redis aslında bakarsanız bir cacheleme servisidir diyebiliriz.
Kısaca anlatmak gerekirse. Twitter,Github,Snapchat,StackOverflow gibi büyük firmaların kullandığı bu database işlevine geçelim . Kullanıcı ve database arasında sorgular gerçekleşir 10 kullanıcı veya çok daha fazlası database’den veri çekmek için sorgu atıyor database bir bellekte tutulduğu için ram donanımına göre çok daha yavaş çalışır. Örnek olarak mesela onlarca kullanıcı sürekli Ürünler adında ki nesneyi almak için database’den sorgu atıyor bu hem veri merkezimi hem de sunucumuza trafik oluşturarak sunucunun yorulmasını sağlar ve performans düşüklükleri yaşanır. Cache mantığında kısa süreli bellek (RAM) üzerinde tutulur bir kullanıcı database içinden bir kere ürünler verisini çektiğinde bu veri kısa süreli bellekte durur hem sunucumuz yorulmaz hem database çalışması aksamaz, geri kalan kullanıcılar her istek attığında ürünler verisini kısa süreli bellek(RAM) üzerinden alır hem daha hızlı performansı yüksek şekilde kullanıcı isteğine ulaşır hem de işletmeyi maliyetten kurtarır. .Net üzerinde
Caching Dikkat Edilmesi Gerekenler
Caching mantığı orijinal verileri kopyalama üzerinedir. Eğer database üzerinde orijinal verilerde bir değişiklik olursa cachelenmiş veriler eski versiyon olarak kalır bu yüzden cachelenmiş veriler bir süre sonra güncellenmesi gereklidir. Güncellenmezse sistemde sorunlara yol açabilir.
Cache çeşitleri ve Absolute time
On-Demand Cach Nedir?
Burada istek üzerine kurulu bir cache yapısı vardır.Eğer bir kullanıcı uygulama ayağı kaldırıldıktan sonrasında istek atarasa o veri cachelenir.
Pre-Populate Cach Nedir ?
Bazı verile değişken olduğu için uygulama ayağa kalktıktan sonrasında istek atılır. Database içerisinde bazı veriler değiştirilmez veya çok nadir üzerinde işlem uygulanır bu gibi veriler için uygulama her ayağa kalktığında uygulamayla beraber cacheleme işleme yapılır.
Absolute Time Nedir ?
Yukarıda anlattığımız gibi veriler güncel kalmayabilir bunun için cachelediğimiz verilerin ne kadar süre kalacağını belirttiğimiz kısımdır süre bittikten sonra otomatik cache silinir.
Microsoft benzer cache mekanizmasını kullanıyor neden Redis kullanıyoruz Redis kullanmak için nedenler:
Yüksek performans
Redis yukarıda bahsettiğimiz üzere verileri hdd veya ssd üzerinde tutmak yerine bir cache metoduyla verileri kısa süreli bellek (RAM) üzerinde tutar.Neden hızlıdır çalışma mantığı olarak (RAM) donanım olarak daha hızlı çalıştığı için hem de kullanıcılar attığı isteklerin yarısı kısa süreli belleğe yarısı veritabanının asıl bulundu hdd veya ssd’lere gittiği için hem ikisinin üzerinde ki trafik azalır hem performası düşmez.Basit algoritmalar ile bu verim sağlanır.
In-Memory Veri Yapıları
Bellek üzerinde ki veriler <key,value> olarak tutulmaktadır. Anahtar üzerinde tutulan değerler Set, Sorted Set,Hash,List,String,Bitmaps,HyperLogLogs,Geostpatital Indexes gibi farklı veri yapılarıda tutulur.
Replication
Redis bilindiği üzere master slave mimarisini kullanmaktadır.Master sleve mimarisi nedir.Türkçe çevrilişiyle efendi-köle anlamına gelir peki nedir? Ana sunucu içinde bir çok veri bulunuyor,bu verileri slave’lere kopyalanır.Sunucunun içinde bu makine bir master burada ki veriler bir slave olarak seçtiğimiz’de master sunucumuzun üzerindeki trafik azalarak üstünde ki yükü azaltırız. Bir slave yarıda kaldığında diğerine sen devam et diyebilirsin.Docker mantığında olduğu gibi güncelleme yaptığımızda diğer slave’lerimizde otomatik güncellenir.
Persistance (Veri Kalıcılığı)
Redis mantığımızda verileri kısa süreli bellek(RAM) içerisinde tutar. Herhangi bir plansız kapanmada,elektrik veya donanım arızalarında verileri kaybetmemek için iki yöntem uygulamaktadır bunlar:
Point-in-time Snapshots:
Verileri database içinde olduğu gibi diskte yüksek yer kaplamasada anlık kopyalamalarını sağlar.Olası bir sistemsel hatada yapılan yanlışlıkla değişmelerde anında diğer kopyasına eriştiğimiz için bozulmaları sorunları engeller.
Append Only File:
Redis mantığında kısa süreli bellek olduğu için içine depoladığı veriler uçucu bir hale geliyor.Bu verilerin depolanmasını sağlanması için kullandığımız Append Only File kısa tanım olarak bellek içi veri deposudur.
Çoklu Dil Desteği
Redis yazılım dilleri üzerinde bir çoğunda desteklenmektedir,bunlar;Java,Python,C,C++,C#,PHP,Javascript,Node.js,Ruby gibi bir çok aktif kullanıcısının çok olduğu dilleri desteklemektedir.
Redis Kullanım Örnekleri
Kuyruklama yapısı : Sunucuya istek attığımızda işlemler makineyi ne kadar zorlayacağına göre işlemin yapılması uzun sürebilir.Redis içerisinde bulunan kuyruk yapısı ile sıraya alıp makineyi aynı anda yormak yerine daha hızlı çalıştırması için sıralama sistemi uygular.
Session Yönetimi
Büyük bir e ticaret sisteminde veya buna benzer sistemlerde kullanıcı çok olduğu için oturum bilgilerini sayfalar arasında iletmek zorlaşıyor ama Redis sayesinde bu işlemlerde kolaylaşıyor.
Pub/Sub
Redis’in yapılarından biriside pub/sub işlevini destekler.
Some Example Data Types
Some String Data Command
Get Key
GetDel Key
Set Key value
Set Key second Value
Set Key offset value
Örnek ;
SET name Oguzcan (oguzcan ismini verdim)
GET name (yukarıda tanımladığımız oğuzcan ismini aldık)
GETRANGE name 0 7 (oguzcan isminin uzunluğunu belirttik)
Some List Data Command
RPUSH key element [element….]
LRANGE key start stop
RPOP key [count]
LLEN key
BLOP key [key….] timeout
RPUSH persons Oguzcan Can Fatih Halit Dogukan (bir liste oluşturduk ve sağındaki isimleri listeye ekledik)
LRANGE person 0 –1 (0 –1 metodu rediste person listesi içinde dolaş komutudur)
SOME CONNECTION DATA COMMAND
Sunucu ve istemci bağlantılarının bulunduğu komutlar
AUTH [username] password
CLIENT ID
CLIENT INFO
CLIENT GETNAME
PING [message]
RESET
QUIT
Genellikle kullanılanlar
QUIT
PING
AUTH password
Redis Docker Containerla Ayağa Kaldırma
Windows üzerinde Chocolatey ile kullanılır bazen versiyon sıkıntıları olmakta bu yüzden linux ortamında ayağa kaldırılan docker container üzerinde bu gibi bir sorunla karşılaşmayız.
Öncelikle linux komut ekranımızı açıyoruz daha sonra
“docker run –rm –p 1453:6379 –name rediscontainer –d redis”
Kodumuz ile redis imajını çeker ve container’ımızı bu şekilde ayağa kaldırabiliriz.