Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pratik Redis

Pratik Redis

Redis, son yıllarda kendisini endüstri standartı olarak kanıtlamış bir in-memory veritabanıdır. Redis'in pratik kullanım alanlarından, çalışma senaryolarına uygulamalı bir şekilde değineceğiz.

Emre Yılmaz

July 28, 2015
Tweet

More Decks by Emre Yılmaz

Other Decks in Programming

Transcript

  1. – Salvatore Sanfilippo, Redis’in yaratıcısı “I see Redis definitely more

    as a flexible tool that as a solution specialized to solve a specific problem: his mixed soul of cache, store, and messaging server shows this very well.”
  2. genel bilgiler • C ile yazılmış, performansı yüksek bir in-memory

    key-value store. • Adını ‘Remote Dictionary Server’dan alıyor. • İlk versiyonu antirez tarafından Mart 2009’de yayınlandı. • Belirlikli aralıklarla diske senkronize olduğu için aynı zamanda veriler kalıcı. (persistent) • github, flickr, twitter, stackoverflow, instagram gibi devler tarafından kullanılınıyor. • Farklı veritiplerini barındırıyor. (listeler, setler, sıralanmış setler, hash tabloları vs.)
  3. veri tipleri • string
 - max. 512 mb
 - binary-safe


    - atomik sayaçlar olarak kullanılabilr. (INCR, DECR…) • listeler
 - liste halinde stringler.
 - LPUSH, RPUSH ile lisstenin başından ya da kuyruğundan eleman ekleyebilmek mümkün.
 - Karmaşıklık: 0(n)s • setler
 - liste halinde stringler. ama aynı eleman birden fazla bulunamaz. 
 - union, intersection, difference gibi dikkat çekici bir komut seti var.
 - karmaşıklık O(1)!
  4. Persistency (verilerin kalıcılığı) - RDB Snapshots • Belirli aralıklarla (konfigurasyon

    seviyesinde ayarlanan değere göre) veritabanına verilerin bir snapshot’ı yazılıyor.
 • Arşivleme için harika bir opsiyon. her gece bir yedeğini alıp gerektiğinde belirli bir tarihe dönülenebilir. • RDB diske yazılırken fork() edildiği için ana redis-server process’i disk’e yazacağım diye bloklanmıyor. • Diger persistency tekniğine göre (AOF) daha hızlı bir açılış süresi sağlıyor.
  5. Persistency (verilerin kalıcılığı) - AOF • Redis-server’a gelen her komut

    kayıt altına alınıyor. Ve sunucu tekrardan başladığında bu kayıtlar teker teker tekrarlanıyor, ve veri seti en güncel halini alıyor. • AOF dosyası büyüdüğünde redis arkaplanda otomatik olarak bu dosyayı küçültüyor. Verinin en son halini almak üzere, minimal operasyonların bir listesi haline getiriyor. • RDB’ye göre biraz daha büyük bir data oluşturuyor. • Sunucunun yeniden başlaması RDB’ye göre biraz daha uzun sürebiliyor.
  6. Hangisini kullanalım? RDB, AOF? • Taşıdıgınız veriye bağlı. Ama genel

    olarak ikisini de kullanmak en güzel pratik. (Belirli aralıklarla RDB snapshotlar ve düzenli bir şekilde AOF.)
 • AOF ile minimum data kaybı yaşamanız daha olası ama hızlı restartlar, veriyi tarihsel yedekleme gibi güzellikleri kaçırırsınız.
 • Eğer veri önemli degil ve re-populate edilebilir bir veri ise, hiçbirini kullanmayın ve disk’e gidip performans’tan kayıp etmeyin.
  7. Güvenlik • Redis, sadece güvendiği IP’lere cevap vermeli. Maalesef, birçok

    sunucu şu an dışarı açık ve veriler ortada.
 • Basit bit AUTH özelliği var, ek güvenlik isteyenler için ideal. Yine de protokol seviyesinde encrypt -> decrypt edilmiyor. (Ağı dinleyen biri ulaşabilir.)

  8. Redis vs Memcache • Ikisi de özünde key-value store. •

    Performansları genelde yakın, çeşitli benchmarklarda redis biraz daha önde. • Redis’te set/get ötesinde onlarca farklı komut seti ve farklı veri tipleri var. • Redis, 2 farklı şekilde persistence (save to disk) opsiyonu sunuyor. • Replication, redis’te mevcutken memcached’ta mevcut değil. Ek projeler var. (repcache)
  9. İlgi çekici projeler redis-faina
 query analiz aracı. en çok kullanılan

    komutlar, en çok zaman alan komutları analiz etmek için güzel. Facebook’un projesi.
 

  10. İlgi çekici projeler resque
 https://github.com/resque/resque
 
 redis backend’i ile yazılmış

    bir queue kütüphanesi. Birçok farklı dile de port edildi.