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.

Ffe7cce8b26d88cb96c8db8df021b5c7?s=128

Emre Yılmaz

July 28, 2015
Tweet

Transcript

  1. Pratik Redis Emre Yılmaz - hello@emre.sh

  2. – 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.”
  3. 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.)
  4. 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)!
  5. 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.
  6. 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.
  7. 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.
  8. 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.)

  9. 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)
  10. pratikte redis • queue (kuyruk) implementasyonları
 
 


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

  12. pratikte redis • istatistik tutmak!
 
 


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

  14. pratikte redis • leaderboard implementasyonları.
 
 


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

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

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

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

    bir proje. 
 

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

    için bir araç. 
 
 
 

  20. Sorular?