Python ve Redis

Sıddık Açıl
2 min readJul 23, 2017

--

Merhabalar yeni bir yazıyla karşınızdayım. Bir önceki yazıma aşağıdaki linkten erişebilirsiniz.

Redis son dönemlerde isminde çokca bahsettiren bir araç. Kendi sitesindeki tanıma göre Redis insanların veri yapılarını Bellek-İçi veritabanlarında tutmasına yarıyor. Veritabanı olarak kullanılmasının yanında Publisher-Subscriber tasarım deseni gerçeklemek için ve ya cache yapısı oluşturmak için de kullanılabiliyor.

Redis’in kendisini yukarıdan kurabilirsiniz.

Redis için gerekli modülü ‘pip install redis’ ile kurabilirsiniz.

PyRedis ile İlk Adımlar

Deger Atama ve Okuma

Temel Redis Komutları

Expire, Delete ve Exists

Expire,Delete ve Exists sorguları

Listeler

Redis’in Linked List veri yapısı

Dictionary Yapısı

Redis’in HashMap veri yapısı

Redis Pipelining

Bir çok işlem yapılacağı vakit -yüz bin kayıt eklemek gibi- bunları ayrı ayrı yapmak yerine bir arada toptan halletmek hem günlük hayatta hem de bilgisayar dünyasında tercih edilen bir yöntem. Redis’in Pipelining özelliği de bir çok komutu birbiri ardına ekleyip her biri için ayrı bir istek yollamak yerine topluca istek yollayarak profesyonel kullanım için hız arttırımı sağlıyor.

Redis’in kendi yaptığı Pipelining Benchmark’ını Python’da tekrarı

Redis Publisher / Subscriber

Publisher / Subscriber Tasarım Deseni iletişim alanında sıkça kullanılan bir kalıptır. Önemli örnekleri:

  • Anakart üzerindeki veriyolları
  • Apache Kafka: Big Data alanında tercih edilen bir Broker sistemi
  • ROS: Robot İşletim Sistemi. Robotik ve Bilgisayarlı Görü ile ilgilenenlerin kullandığı bir platform. Modüller arası iletişim Pub/Sub tasarım deseni ile sağlanıyor.
Redis ile Publisher/Subscriber Tasarım Deseni

Ekstralar

Redis ile LRU Cache Gerçeklemesi

Redis gerçek senaryolarda bir cacheleme mekanizması olarak da kullanılabiliyor. Bunun için bir kaç yöntem var fakat ben burada 2 tanesinden bahsedeceğim.

Birinci yöntem Redis’in ana yazarı olan ‘antirez’in aşağıdaki linkten erişebileceğiniz yazısında bahsettiği ‘maxmemory’ ayarına dayalı yöntem:

Redis’in maxmemory ve maxmemory-policy ayarlarını kullanarak dilediğiniz boyutta bir cache alanı oluşturabiliyorsunuz. ‘maxmemory’ ayarına atadığınız bellek kullanım aşıldığında Redis sizin seçtiğiniz ‘maxmemory-policy’ doğrultusunda cache belleğinizdeki değerleri silip yeniler için yer açıyor.

İkinci yöntem -ki benim daha çok tercih ettiğim yöntem- aşağıdaki Github reposunda anlatılan ‘Sorted Set’ veri yapısına dayalı gerçeklemedir.

Yukarıdaki gerçeklemede yazar HashMap veri yapısını cachelemek istediği elemanlarla dolduruyor. Bir yandan da bu sözlük veri yapısına attığı anahtar-değer çiftlerindeki anahtar değişkenini ve bu değişkenle alakalı bir skor değerini Sorted Set veri yapısında tutuyor. Çok talep edilen objeler için skor değeri artarken, az talep edilenlerde düşük kalıyor. Cache doldukça Sorted Set veri yapısında tuttuğu skor değerleri az olan anahtar değerleri silip yenileri için yer açıyor.

--

--