Redis Yazı Serisi

Ebubekir Doğan
4 min readJan 31, 2023

--

Herkese selamlar…

Bugün Redis ile ilgili bir yazı serisine başlıyoruz. Konu başlıklarını listelemek gerekirse;

1- Redis Caching Nedir ? Caching Çeşitleri Nelerdir?
a- In Memory Cache
b- Distrubuted Cache

2- Redis -Veriler Ne Zaman Cachelenmeli?
a- On Demand
b- Pre Population

3- Cache Ömrü
a- Absolute Time
b- Sliding Time

4- Redis Nedir?

5- Docker Üzerinden Redis Kurulumu

Şimdi hazırsanız ilk konumuz olan caching kavramıyla yolumuza devam edelim.

#1- Redis Caching Nedir ? Caching Çeşitleri Nelerdir?

Caching dediğimiz şey çok sık kullanılan dataların kaydedilmesi tekniğine verilen addır.

Günümüz dünyasında artık hız hayatımızın bir parçası konumuna gelmiştir. Bizlerde yazılım yaparken hız ve performans konusuna çok dikkat etmemiz gerekmektedir. Bu sebeplede daha iyi bir kullanıcı deneyimi sağlamak,uygulamanın performansını artırmak,ölçeklenebilir yazılım yapmak ve gereksiz bant genişliği tüketimini azaltmak için çok sık kullanılan verilerimizi cacheleme ihtiyacı duyarız.

Buraya kadarki kısımda caching kavramını açıklamaya çalıştık.Şimdi ise Caching türlerinin neler olduğundan bahsedelim.

In-Memory Cache

Private cache olarakta adlandırılır. Uygulamayla ilgili dataların uygulamanın bulunduğu Web Server’in Ram’inde kaydedilmesi Ram’den datayı okumakla hdd’den data okumak arasında ciddi bir hız farklı vardır.Günümüz hdd’leri her ne kadar hızlı olsada Ram, verinin buluduğu Hdd ile Client(istemci) arasında köprü görevi gördüğü için veri erişimi bu sebeple hdd’lere göre daha hızlıdır.

Senaryo 1

Yukarıdaki Senaryo 1 adlı resimde en basit anlamıyla bir web uygulamamız olduğunu varsayalım(ortadaki yuvarlak olan simge). Veritabanından istek yapmadan önce 1. numaralı adıma giderek veri cachede var mı (?) ona bakıyor. Veri varsa direk alır ve tüketir veriyi. Yok eğer istek yapılan veri cachede yoksa 2. adıma gidiyor ve veritabanına istekte bulunuyor.
3. adıma gelindiğinde ise veritabanından veriyi alıyor ve veriyi ilk önce cache’e yüklüyor sonrası kullanımlar için döngü bu şekilde devam ederek veri alışverişi sağlanmış oluyor.Eğer ki cacheleme mekanizması olmasaydı şayet sürekli veritabanına bir istekte bulunmuş olunacaktı ve buda veritabanını sürekli meşgul edeceğinden dolayı performans sorunlarına yol açacaktır. Buradaki dezavantaj nedir hep mi iyi bu derseniz de tabikide tek başına bu çözüm değildir.Çünkü burada cachede tutabileceğimiz veri miktarının sınırının Ram’in boyutuna bağlı olduğundan dolayı bir dezavantaj olarak sayabiliriz.

Senaryo 2

Buradaki Senaryoyu açıklarsak; aslında temelinde In Memory’nin neden yetersiz olacağının cevabını almış olacağız.

Senaryo 2'de , 2 adet web sunucumuz olduğunu ve aynı veritabından veri alışveriş yaptıklarını düşünelim ve birde sistemde load balancer olduğunu düşünün. Birinci web sunucumuz bir veri istediğinde bulundu ve yukarıdaki anlattığımız 3.lü adımı gerçekleştirdi ve datayı kendi Ram’ine aldı. İkinci web sunucumuz ise birinci web sunucucusunun aldığı veriye ihtiyaç duydu ve oda 3.lü adımı gerçekleştirmek üzere yola çıktı baktı ki kendi cache’inde o veri yok , veritabanına istekte bulundu bu aynı veri için ve istenilen veriyi 3 lü adıma göre işlemleri tamamladı ve geldi kendi cache’ine koymak üzere yola çıktı, bu veriyi cache koyacak ancak veriler aynı veri olup değişmediyse sıkıntı yok.Ancak aradan zaman geçti ve aynı verinin üzerine birşeyler daha eklendi ve veri güncelliğini yitirmiş oldu. Bunu şöylede örnek verebiliriz. Benim bankada 1000 Tl param var ve önümde 2 tane bilgisayar olduğunu varsayalım. Birinci bilgisayardan banka bakiye bilgime bakmak için banka serverina istekte bulundum ve 3'lü işlemi gerçekleştirdi ve bana bir bakiye verisi verdi.Sonra ikinci bilgisayara geçtim ve o sırada bir arkadaşım bana borcu olan 1000 tl parasını yolladı ve benim bankadaki param 2000 tl oldu.Oysa birinci bilgisayarın cache’inde bana 1000 tl paramın olduğunu söylüyordu.İkinci bilgisayarımdan tekrar banka sunucusuna istekte bulundum ve veriyi çektim ve baktım ki veri 2000 tl olmuş nasıl olmuş diye düşünmeye başlayınca işte burada veri tutarsızlığı başlamış oluyor.Bu veri kayıplarını önlemek için ise Distributed cache mekanizmasına ihtiyaç duymuş oluyor.Gelin şimdide bu konuya değinelim.

Distributed Cache

Distributed Cache dediğimiz şey public key olarakta adlandırılır.İstek yapılan verilerin kendi sunucusundaki Ram’e değilde tamamen ayrı bir yerde olan cache servisinde tutulma işlemine denir.

In memory cache’e göre en büyük avantajı veri tutarsızlıklarının önüne geçmesidir.Çünkü veriler ortak bir havuzda tutulduğu için farklı zamanlarda veriye erişmek istesek bile güncel veriyi anlık olarak almamızı sağlar.

Diğer bir avantajı ise uygulamamızın ayağa kalktığı sunucunun olası durumlara karşı bir restart görmesi halinde sadece kendi cache’indeki veriler silinecektir.Ancak cache mekanizması olarak ayrı bir yerdeki servisi kullandığı için veri kaybı yaşanmayacaktır. Buradaki en basit ve ilk akla gelen dezavantajı ise kendi Ram’ine ulaşmaya göre başka bir cache servisine ulaşmaya çalışmak biraz daha yavaş olacaktır.Ancak bu gözle görülür bir düzeyde değildir ve ayrıca buradaki temel amaç hızlı bir şekilde elde etmiş olduğumuz veriyi kaybetmememizdir.

Bu makalemizin de sonuna geldik. Diğer bölümlerde görüşmek dileğiyle.

--

--