Redis Nedir ?

redis

En basit haliyle Redis, key-value şeklinde tasarlanmış bir NoSQL veritabanıdır. Memcache gibi verileri HDD yazmadan Ram üzerinde tutmaya yarayan bir platformdur. Memcaheden farklı olarak NoSql mantığıyla çalıştığı için serverin kapansa dahi verilerin kaybolmasına izin vermez.

Peki böylebir yapıya neden ihtiyaç duyarız ?

Cevabı basit aslında sql yapıları CPU kullanarak işlem yaptığı için bizim gibi big datalarla çalıştığınızda CPU ya ciddi bir yük bindiriyorsunuz, redis gibi yapılar bu yükü azaltmaya yardımcı olmakla beraber hız konusunda ciddi performans artışları sağlıyor, üstelik XML, JSON vb yapılara ihtiyaç duymadan scriptler arası haberleşmeyede fırsat veriyor.

Php, Python, Ruby, Java, C# gibi bir çok yazılım diline sorunsuzca çalışıyor

Günümüzde kullanılan çoğu programlama dillerinde benzer key-value yapılarını bellekte bilgi saklamak için kullanıyoruz. Örneğin Java da Map yapılarında, ya da C#’ta Dictionary yapılarında key-value şeklinde yapılara rastlamak mümkün. Zaten Redis in açılımına baktığımızda da “Remote Dictionary Service” olduğunu görüyoruz.

Peki Redis’i farklı kılan ne? Öncelikle redis çok hızlı. Sitesinde paylaşılan banchmark’lara göre saniyede 100 bin operasyonu yürütebiliyor. Bunu nasıl yapıyor derseniz, sizin çalıştırdığınız tüm operasyonları bellekte çalıştırıyor ve size bellekteki veriyi dönüyor. Tüm veriyi bellekte tuttuğundan bu derece seri çalışabiliyor.

Herşeyi bellekte tuttuğunu söyledik. Bu durumda insanın aklına hemen çok fazla bellek kullanabileceği geliyor. Fakat, redis tek bir iş yapmaya ve bu işi iyi yapmaya odaklanmış. Redis, hiç bir veri barındırmazken bellekte sadece 1 mb yer kaplıyor. Eğer siz basit bir key-value eşlemesi, örneğin <String,String> şeklinde bir eşleme, tutmak isterseniz, bir millyon adedi bellekte sadece 100 mb yer kaplıyor. Yok ben bu kadar basit veriler tutmayacağım benim verilerim daha karmaşık derseniz, <Hash, Obj> şeklindeki verilerin (burada value alanındaki nesnemizin 5 kırılımı olduğunu varsayıyoruz) bir milyon adedi ise bellekte sadece 200mb yer kaplıyor.

İnternette, redis ile ilgili araştırma yaparken en çok bu üçünün karşılaştırıldığını gördüm. Okuduğum farklı kaynaklardan çıkardığım sonuçlar aşağıdaki gibi. Çok detayına girmek istemiyorum. Memcached yine sadece bellekte çalışan başka bir key-valie yapısı. MongoDB ise döküman şeklinde veri saklamanıza olanak sağlayan başka bir NoSQL veritabanı.

redisnosql

Python ile kullanımından örnek  ;

ilk olarak redis eklentisini çağırmanız gerekiyor

import redis

 redis 6379 portunu kullanır, bizde redisle 6379 portuna bağlanarak işlem yapacağız

Redis

rds = redis.StrictRedis(host='localhost', port=6379, db=0)

redis key=>value mantığıyla çalışır yani hafızada tutmak istediğiniz veriye bir isim vererek hafızaya atarsınız ihtiyacınız olduğunda o isimle getirirsiniz

set

rds.set('anahtar','pythonla ilk redis denemesi')

anahtar keyine “pythonla ilk redis denemesi” verisini atadık şimdi bu veriyi geri nasıl alacağımıza bakalım

get

etir = rds.get('anahtar')
print(getir)

yukarıdaki kodun çıktısı “pythonla ilk redis denemesi” olacaktır,

tamam işim bitti bu veriyi silmek istiyorum.

delete

rds.delete('anahtar')

redis te sildiğiniz veriler redis-server resetlenince geri geliyor bunun sebebi redisn DB olarak kullanılabilme özelliğinden kaynaklanıyor eğer budurumdan kurtulmak istiyorsanız DB özelliğini paypas etmeniz gerek bunun için redis-cli.exe yi açın ve

flushdb

flushdb

komutunu gönderin, tüm verileri sıfırlamak içinse

 flushall
komutunu gönderin. hafızaya verileri süreli olarak atayabilirsiniz, verdiğiniz süre dolduğunda veri kendiliğinden silinir

expire

rds.set('key'=>'value')
rds.expire('key',3)

aynı ön adla hafızada tutulan verileri getirmekte mümkündür, mesela data_1, data_2, data_… anahtarlarıya verileri tanımladık hepsini bir anda çekmek ve işlemek gerekti o zaman

keys

rds.set('data_1'=>'value 1')
rds.set('data_2'=>'value 2')
rds.set('data_3'=>'value 3')
getir = rds.keys('data_*')
for gelen in getir:
    print(rds.get(gelen))

 

yukarıdaki kodun çıktısı aşağıdaki gibi olacaktır.

value 1 
value 2 
value 3

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*
*