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