Python ve Redis
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
Expire, Delete ve Exists
Listeler
Dictionary 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 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.
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.