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.

Avatar for Emre Yılmaz

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.