Redis

Orijinal Yazar(lar) Salvatore Sanfilippo
Geliştirici(ler) Redis Labs
İlk Sürüm 10 Mayıs 2009
Stabil Sürüm 5.0.5
Depo github.com/antirez/redis
Yazılmış ANSI C
İşletim Sistemi POSIX Sistemleri
Uygun İngilizce
Tip Veri Yapısı Deposu, Anahtar-Değer Veri Tabanı
Lisans 3 Maddeli BSD
Web Sitesi redis.io

Redis (/ˈrɛdɪs/; Remote Dictionary Server) isteğe bağlı dayanıklılığa sahip dağıtılmış, hafıza içi anahtar-değer veri tabanını uygulayan hafıza içi veri yapısı projesidir. Redis; string’ler, listeler, haritalar, kümeler, sıralanmış kümeler, HyperLogLog’lar, bitmap’ler, akışlar ve uzamsal endeksler gibi farklı türde soyut veri yapılarını destekler. Proje esas olarak Salvatore Sanfilippo tarafından geliştirilmiştir ve 2019’dan itibaren Redis Labs tarafından desteklenmektedir. 3 maddeli BSD lisansı altında yayımlanan açık kaynak bir yazılımdır.

Tarihçe

Redis adı, REmote DIctionary Server anlamına gelir. Redis projesi, Redis’in ilk geliştiricisi olan takma adı antirez olan Salvatore Sanfilippo, gerçek zamanlı bir web günlüğü analizcisi geliştirerek İtalyan startup’unun ölçeklenebilirliğini geliştirmeye çalıştığında başladı. Geleneksel veri tabanı sistemlerini kullanarak bazı iş yükü türlerini ölçeklendirmede önemli sorunlarla karşılaştıktan sonra Sanfilippo, Tcl’de Redis’in ilk konsept versiyonunun bir prototipini oluşturmaya başladı. Daha sonra Sanfilippo bu prototipi C diline çevirdi ve ilk veri tipini uyguladı. Projeyi birkaç hafta içinde şirket içinde başarılı bir şekilde kullandıktan sonra Sanfilippo projeyi Hacker News’te duyurdu. Proje; Ruby topluluğunda GitHub ve onu benimseyen ilk şirketler arasında olmak üzere yer almaya başladı.

Sanfilippo, Mart 2010’da VMware tarafından işe alındı.

Mayıs 2013’te Redis, Pivotal Software (bir VMware yan ürünü) tarafından desteklenmiştir.

Haziran 2015’te geliştirme Redis Labs tarafından desteklendi.

Ekim 2018’de Redis 5.0 yayımlandı ve birden fazla field’in ve string değerinin tek bir tuşta otomatik, zamana dayalı bir dizilimde depolanmasını sağlayan yeni bir veri yapısı olan Redis Stream yayımlandı.

Diğer Veri Tabanı Sistemleriyle Farklılıklar

Redis; aynı zamanda bir store ve önbellek olarak kabul edilebilen, verilerin her zaman değiştirildiği ve ana bilgisayar belleğinden okunduğu bir tasarım kullanarak değil, aynı zamanda diskte rastgele erişim için uygun olmayan bir biçimde saklanan bir sistem fikrini popüler hâle getirdi. Aynı zamanda Redis; kullanıcı komutları veri tabanı motoru tarafından yürütülecek bir sorguyu değil, belirli soyut verilerde gerçekleştirilen belirli işlemleri tanımladığından ilişkisel veri tabanı yönetim sistemine (RDBMS [relational database management system]) kıyasla çok sıra dışı bir veri modeli sunar. Bu nedenle veriler ikincil endeksler, toplamalar veya geleneksel RDBMS’nin diğer ortak özellikleri biçiminde veri tabanından yardım almadan hızlı erişim için daha sonra uygun olacak şekilde depolanmalıdır. Redis uygulaması, veriyi tutan işlemi çoğaltmak için Fork’u (sistem çağrısı) yoğun şekilde kullanır, böylece ana işlem istemcilere hizmet vermeye devam ederken alt işlem diskteki verilerin bir kopyasını oluşturur.

Popülerlik

Aylık DB-Engines sıralamasına göre Redis genellikle en popüler anahtar-değer veri tabanıdır. Redis ayrıca kullanıcı memnuniyetine ve kullanıcı değerlendirmelerine göre konteynerlerde en popüler NoSQL veritabanı ve 2015’in 1. NoSQL veri tabanı, web sitesi stackshare.io’ya göre, sıralamasına göre, 4. NoSQL veri tabanı seçilmiştir. 2017, 2018 ve 2019 yıllarında Stack Overflow Developer Survey’de en çok sevilen veri tabanı seçildi.

Desteklenen Diller

2.6 sürümünden bu yana Redis, Lua dilinde sunucu tarafında komut dosyası oluşturma özelliğine sahiptir.

Pek çok programlama dili; istemci tarafında Redis dili bağlamalarına sahiptir, bunlardan bazıları şunlardır: ActionScript, C, C++, C#, Chicken, Clojure, Common Lisp, Crystal, D, Dart, Elixir, Erlang, Go, Haskell, Haxe, Io, Java, JavaScript (Node.js), Julia, Lua, Objective-C, OCaml, Perl, PHP, Pure Data, Python, R, Racket, Ruby, Rust, Scala, Smalltalk, Swift ve Tcl. Bu dillerde birkaç istemci yazılımı programı bulunmaktadır.

Veri Tipleri

Redis, anahtarları değer türlerine eşler. Redis ve diğer yapılandırılmış depolama sistemleri arasındaki önemli bir fark; Redis’in yalnızca string’leri değil, aynı zamanda soyut veri türlerini de desteklemesidir:

  • String’lerin listesi
  • String’lerin kümeleri (tekrarlanmayan sıralanmamış elemanların koleksiyonları)
  • Sıralı string’lerin kümeleri (puan adı verilen kayan noktalı bir sayıya göre sıralanan, yinelenmeyen öğelerin koleksiyonları)
  • Anahtarların ve değerlerin string olduğu karma tablolar
  • HyperLogLogs, Nisan 2014’te Redis 2.8.9’dan beri mevcut olan yaklaşık küme nicelik büyüklüğü tahmini için kullanıldı.
  • Tüketici grupları içeren girdi akışı, Ekim 2018’de Redis 5.0’dan beri kullanılabilen, tek bir anahtarda otomatik, zamana dayalı bir diziyle birden fazla field ve string değerini saklamanıza olanak tanır.
  • Redis 3.2’den beri mevcut olan geohash tekniğinin uygulanması yoluyla coğrafi veriler.

Bir değerin türü, değer için hangi işlemlerin (komutlar denir) kullanılabileceğini belirler. Redis; ara kesit, birlik ve kümeler arasındaki fark ve listelerin, kümelerin ve sıralanmış kümelerin sıralanması gibi üst düzey, atomik, sunucu tarafı işlemlerini destekler.

Redis Modules API’sına dayanarak daha fazla veri türü desteklenir. Redis modülü RedisJSON, ECMA-404’ü (the JavaScript Object Notation (JSON) Data Interchange Standard) yerel bir veri türü olarak uygular.

Sebat

Redis genellikle tüm veri kümesini bellekte tutar. 2.4’e kadar olan sürümler, bazı veri kümelerinin diskte depolandığı sanal bellek olarak adlandırdıklarını kullanmak için yapılandırılabilir ancak bu özellik kullanımdan kaldırılmıştır. Redis’te sebat iki farklı yöntemle sağlanabilir. Öncelikle Redis RDB Dökümü Dosya Formatı’nı kullanarak veri kümesinin düzenli aralıklarla ikili dökümü olarak bellekten diske asenkronize edildii anlık görüntüyle. Alternatif olarak veri kümesini değiştiren her işlemin bir kaydının bir arka plan işleminde bir append-only file (AOF) eklenmesiyle günlüğe kaydetme yoluyla. Redis, günlüğe kaydetmenin belirsiz bir şekilde büyümesini önlemek için arka planda append-only file’yi yeniden yazabilir. Günlüğe kaydetme 1.1 sürümünde tanıtıldı ve genellikle daha güvenli bir yaklaşım olarak kabul edilir.

Varsayılan olarak Redis; verileri gerekirse en az 2 saniyede bir dosya sistemine yazar, gerekirse daha fazla veya daha az güçlü seçenek kullanılabilir. Varsayılan ayarlarda tam bir sistem arızası durumunda sadece birkaç saniye veri kaybedilir.

Kopyalayarak Çoğaltma

Redis, master kopya çoğaltmayı destekler. Herhangi bir Redis sunucusundaki veriler herhangi bir sayıda kopyaya çoğaltılabilir. Bir çoğaltma, başka bir çoğaltma için master olabilir. Bu, Redis’in tek köklü bir çoğaltma ağacını kullanmasını sağlar. Redis kopyaları; örnekler arasında kasıtlı ve kasıtsız tutarsızlığa izin vererek yazmaları kabul edecek şekilde yapılandırılabilir. Yayımlama / abone olma özelliği tamamen uygulanmıştır, bu nedenle bir eşlemenin istemcisi bir kanala abone olabilir ve master birimde çoğaltma ağacının herhangi bir yerinde yayımlanmış tüm iletilerin yayınını alabilir. Çoğaltma, okunabilir (ancak yazılmaz) ölçeklenebilirlik veya veri fazlalığı için kullanışlıdır.

Performans

Verilerin dayanıklılığına ihtiyaç duyulmadığında Redis’in hafıza içi doğası, bir işlemi izin vermeden önce her değişikliği diske yazan veri tabanı sistemlerine kıyasla iyi performans göstermesini sağlar. Redis; tek bir işlem olarak çalışır ve AOF’yi (append-only file) yeniden yazarken tek ve çift iş parçacıklıdır. Bu nedenle tek bir Redis örneği, kaydedilmiş işlemler gibi görevlerin paralel yürütülmesini kullanamaz.

Kümelenme

Redis, Nisan 2015’te 3.0 sürümünün yayımlanmasıyla kümelemeye başlamıştır. Küme belirtimi Redis komutlarının bir alt kümesini uygular: Tüm tek tuş komutları kullanılabilir, çok tuşlu işlemler (birlikler ve ara kesitlerle ilgili komutlar) aynı düğüme ait anahtarlarla sınırlıdır ve veri tabanı seçim işlemleriyle ilgili komutlar kullanılamaz. Bir Redis kümesi; 1.000 düğüme kadar ölçeklenebilir, “kabul edilebilir” yazma güvenliği sağlayabilir ve bazı düğümler başarısız olduğunda işlemlere devam edebilir.

Kullanım Durumları

Veri tabanı tasarımının doğası gereği; tipik kullanım durumları oturum önbelleğe alma, tam sayfa önbelleği, mesaj sırası uygulamaları, lider tabloları ve diğerleri arasında sayma vardır. Twitter gibi büyük şirketler Redis kullanıyor, Amazon Web Services portföyünde Redis sunuyor ve Microsoft, Azure’de Redis Cache sunuyor.

Ayrıca Bakınız

Free and open-source software portal

Ticari Uygulamalar

Bazı şirketler Redis’i kullandı ve çevresinde ticari teklifler oluşturdu:

  • Redis Labs’tan Redis Enterprise Software
  • Redis Labs’tan Redis Cloud Essentials ve Redis Cloud Pro
  • Amazon Web Services’ten ElastiCache
  • Microsoft Azure’den Azure Cache
  • Google Cloud Platform’dan Cloud Memorystore for Redis

21 Şubat 2019’da Redis Labs; kullanıcıların yazılımı satmasını yasaklayan, source-available bir sözleşme olan Redis Source-Available License altında bazı Redis Modules’i yeniden lisansladı. Redis Modules daha önce Affero General Public License altında lisanslanmıştır.

References

  • This work, “Redis Hafıza İçi Veri Yapısı Projesi Nedir?”, is a derivative of “Redis” by Wikiwand, used under CC BY-SA. “Redis Hafıza İçi Veri Yapısı Projesi Nedir?” is licensed under CC BY-SA by The FLOSS Information.