Slide 1

Slide 1 text

Pratik Redis Emre Yılmaz - [email protected]

Slide 2

Slide 2 text

– 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.”

Slide 3

Slide 3 text

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.)

Slide 4

Slide 4 text

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)!

Slide 5

Slide 5 text

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.

Slide 6

Slide 6 text

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.

Slide 7

Slide 7 text

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.

Slide 8

Slide 8 text

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.)


Slide 9

Slide 9 text

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)

Slide 10

Slide 10 text

pratikte redis • queue (kuyruk) implementasyonları
 
 


Slide 11

Slide 11 text

basit bir queue implementasyonu (fifo) örnek: https://github.com/chrisboulton/php-resque

Slide 12

Slide 12 text

pratikte redis • istatistik tutmak!
 
 


Slide 13

Slide 13 text

INCR nimetleri Önerilen okuma: Visitor Tracking with Redis and PHP

Slide 14

Slide 14 text

pratikte redis • leaderboard implementasyonları.
 
 


Slide 15

Slide 15 text

Sorted Set’ler Önerilen okuma: Creating Game Leaderboards w/ Redis.

Slide 16

Slide 16 text

İ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.
 


Slide 17

Slide 17 text

İ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.
 


Slide 18

Slide 18 text

İlgi çekici projeler redlock-php
 https://github.com/ronnylt/redlock-php
 
 distrubuted lock oluşturmak için bir proje. 
 


Slide 19

Slide 19 text

İlgi çekici projeler redis-router
 https://github.com/emre/redis-router
 
 Redis’te client bazlı sharding için bir araç. 
 
 
 


Slide 20

Slide 20 text

Sorular?