Redis Nedir Nerelerde Kullanılır.

Metin Ağaoğlu
Kodcular
Published in
5 min readAug 29, 2019

Herkese selam, bu yazımızda redis’e teorik bir giriş yapıp ne olduğundan ve nerelerde ,hangi senaryolarda kullanıldığından bahseceğiz.

Remote Dictionary Server ifadesinin kısaltması olan Redis; kendisini daha çok veri yapısı sunucusu(as a data structure server) olarak konumlandırıyor.Redis aslen verileri bellek tutan , açık kaynaklı bir NoSQL veri tabanıdır.

Redis’in kendi dökümantasyonundaki tanımda da değinildiği gibi redis aslında sadece basit bir key-value sunucusu değildir.Onu diğer alternatiflerinden arasından en önemli farklardan birisi Redis’in yüksek seviye veri yapılarını saklama ve kullanma yeteneğidir.Bu veri yapıları, çoğu geliştiricinin aşina olduğu temel veri yapılarıdır (list, map, set). Redis’in performansı, sadeliği ve veri yapılarının atomik manipülasyonu, geleneksel ilişkisel veritabanları ile uygulandığında performans olarak sıkıntı çıkartan problemleri çözme konusundaki yetenekleri biz geliştiricilere oldukça kolaylık sağlamaktadır.

Redis’in in memory bir veritabanı olduğundan bahsettik.Bu demek oluyorki redis verilerinizi RAM bellek üzerinde saklamaktır.Ancak isteğinize bağlı olarak verileri belirli zaman aralıklarıyla disk’e kaydedebilir.Bu sayede veri tutarlılığını da sağlamış oluyorsunuz. Redis’in verilerinizi bellekte tutmasının diğer bir avantajı okuma ve yazma işlemlerini mili saniyelere kadar düşürebilmesidir. Doğru senaryoda, doğru veri yapısını kullandığınız durumlarda veriye ulaşma maliyetinizi O(1)’e kadar düşürebilirsiniz.

Bunların yanında redis, köklü bir açık kaynak projesidir ve Twitter, GitHub, Tumblr, Pinterest, Instagram, Hulu, Flickr ve The New York Times gibi büyük şirketler tarafından production ortamında kullanılmaktadır.Makalenin son kısmında bu şirketlerin redis’i hangi ihtiyaçları için, nasıl kullandıklarına değindik.

Redisin Kullanım Senaryoları

Redisten kısaca bahsettikten sonra şimdide biraz hangi durumlar için redis kullanmalısınız maddeler halinde değinmeye çalışalım.

Caching

Verileri ön belleğe almayı genellikle , okuma ve yazma isteklerini geleneksel veri tabanları ile karşılayamayacak hale gelindiğinde veya uygulama performansı düştüğünde , tercih ederiz.Bu noktadaki temel mantığımız arka uçtaki veri tabanımızın veya uygulamamızın yükünü hafifleterek verilere ön bellekten daha maliyetsiz ve hızlı olarak ulaşmaktır.Redis bu noktada çok güçlü bir araç olarak karşımıza çıkmaktadır. Redis sık istenen öğeleri mili saniyenin altındaki yanıt sürelerinde sunabilmektedir. Redis ile örnek ön belleğe alma işlemlerinden bazılarını aşağıda listeledik.

  • Veritabanı sorgusu sonuçlarını ön belleğe alma,
  • Kalıcı oturumları ön belleğe alma,
  • Web sayfasını ön belleğe alma
  • Resimler, dosyalar ve meta veriler gibi sık kullanılan nesneleri ön belleğe alma,

Ayrıca caching ve caching mekanizmaları için daha fazla bilgi için aşağıdaki makaleyi okumanızı tavsiye ederim: http://bilgisayarkavramlari.sadievrenseker.com/2012/11/07/caching-mekanizmalari/

Session Store

Uygulamalarımızda gerek oturum bilgileri için gerekse de başka verilerimizi tutmak için sessionları oldukça yoğun kullanıyoruz.Bu noktada da Redis oturumlarımızı saklamak için iyi ve popüler bir alternatif olarak karşımıza çıkıyor.Redis ile kullanıcı profilleri, kimlik bilgileri, kullanıcıya özgü veriler vb. gibi session verilerini mili saniyelere varan hızlarda okuyabilmenize olanak sağlar.

Ayrıca uygulama sunucularımızı bir yük dengeleyici arkasında alıp çokladığımızda da karşımıza çıkan session problemini , oturumları rediste tutarak çözebiliriz. Örneğin (N) adet uygulama sunucumuzda session okuma ve yazmaları için redis’i kullanıcaktır.

Pub/Sub:

Redis 2.0'dan sürümünden itibaren Pub/Sub mesajlaşma paradigmasını desteklemektedir.Hatta bazı firmalar projelerinde, redis’in sadeliği ve performansı nedeniyle RabbitMQ vb. gibi teknolojileri bırakıp redisi tercih ettiklerini açıklamaktadırlar.

Yazının konusu olmadığı için Pub-Sub’a değinmeyeceğim .Ancak daha fazla bilgi isteyenler için kısa bir başlangıç yazısı olarak linkteki yazı okunabilir.

https://gezegen.linux.org.tr/?cat=1321

Queues

Projemizde ki bazı işlemler,bizden kaynaklı veya değil fazla zaman alırlar.Bizlerde genelde bu tarz işleri bir kuyruğa atıp arka planda çalışmasını isteyebiliriz.Zaten halihazırda popüler birçok web frameworküne de kuyruklar entegre edilmiş haldedir.

Özellikle iş kuyrukları için tercih edebileceğimiz birçok farklı alternatifimiz vardır.(RabbitMQ,Amazon SQS vb).Bu tarz bi kuyruk sisteminde de kuyruktaki veriye hızlı ulaşım gibi nedenlerle redis tercih edilebilir.

Counters

Redis’teki HINCRBY gibi atomik komutlar, sayesinde basit ve tasarruf sağlayan bir sayaç uygulaması oluşturabiliriz.Sayaç oluşturmak, için yapmanız gereken çok basit bir anahtar belirlemek ve HINCRBY komutunu ile artırmak.Hepsi bu kadar.Artış yapmadan önce veri okumaya gerek yok,güncellenecek veritabanı şemaları da yok.Gayet basit ve veri tabanını her seferinde meşgul etmeyeceğiniz bi işlem.Ayrıca HINCRBY komutu söylendiği atomik olduğu için sayaçlar, birden çok uygulama sunucusundan erişildiğinde tutarlılığı sağlayacaktır.Sayaçla işiniz bittiğinde nihai veriyi gene veritabanınıza kayıt edebilirsiniz.Ama işin asıl yoğunluk getiren kısmı için veri tabanındansa redisi tercih etmek tabi ki daha mantıklı.

Yukarıdaki saydığım tüm işlemlerde redis kullanılabilmektedir.Şimdi ise redisi kullanan büyük firmalara ve nasıl kullandıklarına bir göz atalım.

Redis’i kullananlar

Redis’in kullanan şirketler’e bu linkten bakabilirsiniz.Biz bu bölümde bazılarını kısaca inceleyeceğiz.

Twitter

Twitter kullanıcılarının ana akışını Rediste saklamaktadır. Redisteki liste veri yapısını kullanan twitter, belirli bir kullanıcı için gelen en son 800 tweet’i bu listede saklar.Daha fazla ve ayrıntılı bilgi için twitter tarafından verilen sunuma bu linkten ulaşabilirsiniz.

Pinterest

Pinterestte kullanıcıların resim paylaştığı, pano oluşturdukları ,birbirlerini ve panolarını takip edip pinleme yapabildikleri bir sosyal ağdır.Pinterest aşağıda yer alan bilgiler için redis’i tercih etmektedir.

  • Takip ettiklerinizin listesi
  • Takipçilerinizin listesi
  • Panolarınızı takip eden kişilerin listesi
  • Takip ettiğiniz panoların listesi
  • Her panonun takipçileri ve takipçileri

Pinterest, 70 milyon kullanıcısı için yukarıdaki verileri rediste saklar.Temel olarak kullanıcı id’mizi key olarak belirleyip ilgili buna göre saklar.

Bitirirken

Kısacası daha önce bakmadıysanız veya sadece kulak aşinalığınız varsa incelemenizi önerebileceğim bir teknoloji.

Bu yazımda basit olarak redis nedir,nerelerde kimler tarafından kullanılır bunlara değinmeye çalıştım.Ayrıca redisteki veri temel bir şekilde incelediğim yazıma aşağıdan ulaşabilirsiniz.

Yazıda hatalı veya eksik gördüğünüz yeri bana bildirirseniz sevinirim.Teşekkürler.

Yararlandığım Kaynaklar

--

--