Redis ile Python Üzerinde Hızlı Veri Saklama/Çekme

Redis; sunucunuzun belleğini kullanabilen, buna veri çiftleri kayıt ederek veri tabanı, önbellek(cache) ya da nasıl isterseniz öyle kullanmanızı sağlayan ve daha sonra belleğin avantajı ile bunu çok hızlı olarak okumanızı sağlayan açık kaynak kodlu çoğunlukla C dili ile yazılmış bir araçtır.  Aşağıdaki linkte çok güzel hazırlanmış bir interaktif dersi mevcut, İngilizce sorununuz yok ise mutlaka bakmanız gerekir, sorununuz var ise çözmenin zamanı gelmiş demektir.

http://try.redis.io/

Yukarıdaki linkte olduğu gibi Redis komut satırından da kullanılabilir tabi ama ben projelerime dahil edebilmek için Python ile kullanacağım. Temel kullanım aynı olacağı için kullandığınız (client dedikleri) dilin pek önemi yok. Client listesine şuradan göz atabilirsiniz, kendi favori diliniz ile de deneyiniz.

İlk işimiz Redis’i indirip kurmak oluyor. Şu adresten indirip açabiliriz ya da aşağıdaki komutları uygulayabiliriz.

Windows üzerinde bir destek yok o yüzden Linux bir işletim sistemi üzerinde denemeniz ya da çalışmanız gerekli.

Şu anki sürüm 4.0.1 daha günceli olabilir kontrol etmenizde fayda var.

Birkaç dakika içinde derleme işlemi src klasörüne yapılıyor. Redis sunucusunu başlatmak için şu yolu çalıştırıyoruz.

Sunucumuz başladıktan sonra Redis içinde bulunan komut satırı arayüzü ile denemelerimizi yapabilir ya da kurulumun doğruluğunu kontrol edebiliriz.

Bir sonraki Python üzerinde kullanabilmemiz için gerekli paketi yüklemek, tavsiye edilen redis-py paketini kuracağız. Aşağıdaki komut ile kurulumu yapıp Python yazmaya geçebiliriz. (Redis-Py Docs)

Spyder üzerinde adım adım işleyerek deneyeceğim, size de tavsiye ederim. Önce redis paketini ekleyip bir bağlantı oluşturuyoruz. Burada kullandığımız port parametresi src/redis-server komutunu kullandığımız zaman ekrana basılmıştı oradan kontrol edilebilir. db parametresi ise redis üzerinde çalışan pek çok database var ve hangisini kullanmak istediğimizin index’ini vermemiz gerekiyor.

Burada Redis’in bizim için çözdüğü bir sorundan bahsedeyim. Kullandığımız incr metodu ile değerimizi arttırdık fakat çok yoğun bir web sitesinde bunu kullandığımızı düşünün istekler o kadar sık olacak ki okunan değer ile incr motıdu arasında adet değeri başka bir client tarafından değiştirilmiş olabilir. Büyük bir sorun bu pek çok veri kaybına yol açacaktır. Fakat Redis hataya izin vermeyip çözecektir.

Birden fazla değer oluşturmak/güncellemek istediğimizde performanslı olması açısından pipeline denilen metodu kullanmamız gerekli. Bu şekilde redis tabanında bir transaction oluşacak ve komutların hepsi ya da hiçbiri yine atomic olarak çalışacak.

Burada execute komutu bize iş sıramıza göre bir dizi değer dönecektir. Set için True, incr için yeni değer döndürdü.

 

Bir Cevap Yazın