Güçlü ve zengin özelliklere sahip bir veri tabanı arayan geliştiriciler, genellikle Redis’ten yararlanır. DB-Engines sıralamasına göre Redis, şu anda en yaygın kullanılan 8. veri tabanı yönetim sistemdir ve aynı zamanda anahtar – değer veri tabanları için dünya çapında en popüler seçimdir. Dahası, Stack Overflow’un 2019 araştırmasına göre, Redis, Oracle, MySQL ve Microsoft SQL Server gibi alternatiflerin önünde “en sevilen” veri tabanı teknolojisidir.
Peki Redis tam olarak nedir ve Redis’in avantajları ve özellikleri nelerdir? Bu yazıda, sizin için doğru veri tabanı teknolojisi olup olmadığına karar verebilmeniz için Redis hakkında bilmeniz gereken her şeyi anlatacağız.
Haydi başlayalım!
Redis Nedir?
Redis – Remote Dictionary Server (Uzak Sözlük Sunucusu); ilişkisel olmayan anahtar/değer veri tabanlarını ve önbellekleri uygulamak için yaygın olarak kullanılan açık kaynaklı bir bellek içi veri deposudur.
Bu ayrım önemlidir. Çünkü Redis teknik olarak bir veri yapısı deposudur ve bir anahtar/değer veri tabanı değildir. Geleneksel anahtar – değer veri tabanlarında, her anahtar, yorumlanmamış bir bayt dizisiyle ilişkilendirilen isteğe bağlı bir dizedir.
Redis gibi veri yapısı depoları bu sınırlamayı kaldırır. Anahtar bir dize veya liste, küme, karma, bit dizisi veya akış gibi daha karmaşık bir veri yapısı olabilir. Bu, geliştiricilerin birden çok Redis kullanım örneğinden yararlanmasını sağlar:
- Anahtar-değer veri tabanı: Redis, yaygın olarak, hafif ve verimlidir ve ilişkisel olmayan bir anahtar-değer veri tabanını uygulamak için kullanılır. Örneğin, 1 milyon küçük anahtar (örneğin dizeler) içeren bir veri tabanı, bellekte yaklaşık 85 megabayt yer kaplar.
- Önbellek: Rastgele verileri depolayabildiği için Redis, bir uygulama önbelleği de uygulayabilir. Veriler bellekte depolanır ve önbellekten okuma ve önbelleğe yazarken mümkün olan en iyi performansı sunar.
- Message broker: 2.0 sürümünden bu yana Redis, message broker olarak da kullanılmasına izin veren yayınla/abone ol mesajlaşma modelini destekler.
Twitter, GitHub ve Pinterest gibi büyük teknoloji şirketlerinin tamamı Redis kullanıyorken, Redis’in hem popüler olması hem de geliştiriciler arasında çok sevilmesi şaşırtıcı değildir.
Redis; oyun, iOT, sosyal ağ, finansal hizmetler, sağlık sektörü ve reklam teknolojisindeki gerçek zamanlı uygulamalar için saniyede milyonlarca isteğe olanak tanıyan milisaniyenin altında yanıt süreleri sunar. Redis ayrıca; önbelleğe alma, oturum yönetimi, oyun, skor tabloları, gerçek zamanlı analitik, coğrafi konum, araç çağırma, sohbet/mesajlaşma, medya akışı ve pub/alt uygulamalar için popüler bir seçimdir.
Dizeler, karmalar, listeler, kümeler, aralık sorgularıyla sıralanmış kümeler, bitmapler, hiperloglar ve yarıçap sorgularıyla coğrafi uzamsal dizinler gibi veri yapılarını destekler. LRU tahliyesi, Lua komut dosyası oluşturma, yerleşik çoğaltma, işlemlerin yanı sıra diskte kalıcılığın farklı aşamalarına sahiptir. Redis Sentinel aracılığıyla veya otomatik bölümleme ile Redis Cluster’dan yararlanarak yüksek kullanılabilirlikli çözümler için yerleşik destek sunar.
Redis’in Özellikleri Nelerdir?
Redis, ANSI C dilinde yazılmıştır ve BSD, Linux, OS X gibi POSIX sistemlerinin çoğunda herhangi bir dış bağımlılık olmadan çalışır. OS X ve Linux, Redis’in en çok geliştirildiği ve test edildiği iki işletim sistemi olarak kabul edilirken, Linux aynısını dağıtmak için kullanılmıştır. Redis, SmartOS gibi Solaris’ten türetilen sistemlerde de çalışabilir. Ne yazık ki, Windows yapıları için sağlanan resmi bir destek yoktur, ancak Microsoft, Redis için bir Win-64 bağlantı noktası geliştirmiş ve sürdürmüştür. Redis’in diğer önemli özellikleri ise aşağıdaki şekildedir:
1. Yüksek Düzeyde Veri Yapısı
Redis, değerler için beş olası veri seçeneği sunar. Bunlar karmalar, listeler, kümeler, diziler ve sıralanmış kümelerdir.
2. Üstün Performans
Bellek içi doğası, karmaşıklığın minimumda kalmasını sağlama taahhüdü ve olay tabanlı bir programlama modeli olması nedeniyle, uygulama okuma ve yazma için olağanüstü bir performansa sahiptir.
3. Son Derece Hafiftir ve Bağımlılık Yoktur
Redis, ANSI C dilinde yazılmıştır ve hiçbir dış bağımlılıkla sınırlı değildir. Program, tüm POSIX ortamlarında mükemmel şekilde çalışır. Windows platformu Redis için resmi olarak desteklenmemektedir, ancak Microsoft tarafından aynı şekilde deneysel bir yapı sağlanmıştır.
4. Yüksek Kullanılabilirlik
Redis, yüksek düzeyde veri kullanılabilirliği sağlamak için yerleşik desteğe sahiptir. Şu anda Redis Sentinel olarak adlandırılan ve kullanılabilir durumda olan, ancak halen devam eden bir proje olarak kabul edilen yüksek kullanılabilirlikli bir çözüm vardır.
Bulutistan Redis hizmetinin detaylarına ulaşmak için tıklayınız.
Redis Nasıl Çalışır?
Redis, beş farklı veri yapısından biriyle eşleşen anahtarları depolayarak çalışır: STRING’ler, LIST’ler, SET’ler, HASH’ler ve ZSET’ler (sıralı kümeler). Bazı Redis komutları bu beş veri yapısının tümü arasında paylaşılırken diğerleri yalnızca bir veya ikisi tarafından kullanılır.
Veri tabanının bütünlüğünü korumak için dağıtabileceğiniz dört ana Redis sürümü vardır:
- Dikey ölçeklenebilirlik ve esneklik içermeyen bağımsız Redis.
- Tek bir yöneticinin verileri birden çok bağımlı öğeye çoğalttığı Redis master-slave replication.
- Master-slave sistemini izleyen ve eskisi bozulduğunda yeni bir master’ı otomatik olarak yeniden yapılandıran Redis Sentinel.
- Çok büyük dağıtımlar için hem ölçeklenebilirlik hem de esneklik sağlamak için çok yöneticili bir mimari kullanan Redis Cluster (Küme)
Redis Nerede ve Ne Zaman Kullanılır?
Redis’in performansı oldukça yüksek olduğundan, temel olarak önbelleğe alma amacıyla kullanılır. Sözlük yapısıyla saklayabileceği çeşitli türler sunduğu için Redis’in en çok parladığı yer burasıdır.
Bununla birlikte, yüksek trafik ve statik içerik içeren tam sayfaları önbelleğe almak için de Redis’i kullanabiliriz. Sayfanın kendisi değişime açıksa veya içerik dinamik olarak oluşturulmuşsa, Redis veya Memcached kullanıyor olmanıza bakılmaksızın hiçbir durumda önbelleğe alınmamalıdır. Sayfa çoğunlukla statik içerik içeriyorsa veya içerik her x zaman aralığında yenileniyorsa, o sayfayı önbelleğe alabilir ve hemen sunulmasını sağlayabilirsiniz.
Redis’in kullanılabileceği başka bir şey de oturumları saklamaktır. Kalıcılığı olmayan Memcached’den farklı olarak Redis’te bu vardır ve bu, oturum depolamasına izin verir. Oturumları Redis ile yönetmek, siteyle etkileşim kurarken kullanıcı deneyimini de artırır.
Kalıcılık, kullanıcı etkileşiminin kritik bölümlerinde veri kaybını önlemek için oturumları depolamak için önemlidir. Örneğin, bir ödemenin işlenmesi, alışveriş sepetine bir öğenin eklenmesi veya kimliği doğrulanmış bir kullanıcı olarak herhangi bir işlem talep edilmesi…
Redis Kullanım Örnekleri
Aşağıda Redis’in kullanım örneklerinden bazılarını bulabilirsiniz:
1. Oturum Önbelleği
Birçok web sitesi, HTML parçalarını veya sayfalarını önbelleğe alarak web sitesi deneyimlerini hızlandırmak için bir oturum önbelleği oluşturmak için Redis Dizelerinden yararlanır. Veriler geçici olarak RAM’de depolandığından, bu özellik Redis’i oturum önbelleği olarak mükemmel bir seçim haline getirir. Örneğin, bir çevrimiçi mağazadaki bir alışveriş sepetinde depolanan öğeler gibi kullanıcıya özel verileri geçici olarak saklayabilir. Bu, kullanıcılarınızın oturumlarını kapatmaları veya bağlantılarını kaybetmeleri durumunda verilerini kaybetmemeleri açısından çok önemlidir.
2. Tam Sayfa Önbelleği – Full Page Cache (FPC)
Temel oturum belirteçlerinizin dışında Redis, içinde çalışması çok kolay bir FPC platformu sağlar. Magento, Redis’i tam sayfa önbellek backend olarak kullanmak için bir eklenti sunar. Ayrıca, WordPress kullanıcılarınız için Pantheon, şimdiye kadar gördüğünüz en hızlı sayfa yüklemelerini elde etmenize yardımcı olacak wp-redis adlı harika bir eklentiye sahiptir.
3. Queues
Trafik sıkışıklığı, mesajlaşma, veri toplama, iş yönetimi veya paketleyici yönlendirme ile ilgilenen herhangi bir uygulama, kaynak dağıtımı için geliş ve çıkış hızına göre sıra boyutunuzu yönetmenize yardımcı olabileceğinden, bir Redis Queues’u dikkate almalıdır.
4. Leaderboards/Counting
Redis, gerçek zamanlı skor tabloları oluşturmak isteyen oyun geliştiriciler arasında popüler bir seçimdir. Kullanıcı puanlarına göre sıralanmış listeyi korurken öğelerin benzersizliğini sağlayan Redis Sorted Set veri yapısını kullanmanız yeterlidir. Gerçek zamanlı bir dereceli liste oluşturmak, bir kullanıcının puanını her değiştiğinde güncellemek kadar kolaydır. Puan olarak zaman damgalarını kullanarak zaman serisi verilerini işlemek için Sorted Sets’i de kullanabilirsiniz.
5. Pub/Sub
Redis, yayınla ve abone ol (Pub/Sub) komutlarının kullanımını destekler, kullanıcılar tüm uygulama ve hizmetlerinde yüksek performanslı sohbet ve mesajlaşma hizmetleri tasarlayabilir. Bu, atomik işlemleri ve engelleme yeteneklerini çalıştırmak için liste veri yapılarını kullanma yeteneğini içerir.
6. Gerçek Zamanlı Analiz
Redis, verileri milisaniyenin altında gecikmeyle işleyebilir; gerçek zamanlı analitik, çevrimiçi reklam kampanyaları ve yapay zeka güdümlü makine öğrenimi süreçleri için idealdir.
Sosyal ağ siteleri, RSS Beslemeleri, e-ticaret satışlarını analiz etme, IP adresi izleme, uygunsuz içerik filtreleme, soru-cevap platformları, görev planlama hizmeti, kullanıcı gönderileri ve profiller, çoklu depolama gibi başka kullanımlar da vardır.
Redis Neden Kullanılmalı?
Redis’i kullanmanız için birçok neden vardır. Bu nedenlerden bazıları aşağıdaki şekildedir:
1. Hızlı yanıt veri tabanı
Verileri bir disk veya katı hal sürücüsü (SSD) yerine bellekte depolar, bu nedenle okuma ve yazma işlemlerini gerçekleştirirken yanıt süresi diğerlerinden daha hızlıdır.
2. Veri kalıcılığı
Redis, süreç kesintileri için tasarlanmış kalıcı disk depolama kullanır. Redis, verilerin düzenli anlık görüntülerini alarak ve kullanılabilir olduklarında bunlara değişiklikler ekleyerek veri kümelerini kalıcı hale getirebilir. Ardından veri tabanı dayanıklılığı ve bütünlüğünü sağlamak için bu veri tabanı yedeklerini isteğe bağlı olarak veya otomatik aralıklarla oluşturacak şekilde yapılandırılabilir.
3. Rastgele veri desteği
Redis’te depolanan veriler herhangi bir biçimde ve boyutta olabilir. Redis ikili dosyalar için güvenlidir, bu nedenle insan tarafından okunabilen metinlerden kodlanmış ikili dosyalara kadar her türlü veriyi depolayabilir. Redis’teki tek bir veri öğesinin boyutu 0 bayttan 0,5 GB’a kadar değişebilir. Bu da hemen hemen her veriyi önbelleğe almasına olanak tanır.
4. Anahtar tabanlı erişim
Redis, verilerin depolandığı ve anahtarla Redis’ten alındığı anahtar/değer modeline dayanır. Anahtar tabanlı erişim, son derece verimli erişim sürelerine izin verir ve bu model, verilerle etkileşim için geleneksel GET ve SET semantiğini sağlayan Redis ile doğal olarak önbelleğe alma ile eşleşir.
5. Veri sona erme süresi
Redis’teki anahtarlar, geçerlilik süresi (TTL) ile ayarlanabilir ve ardından süreleri dolar. Süresi dolana kadar bu tür anahtarlara “geçici” anahtarlar denir.
6. Geliştirici dostu
Redis çoğu dilde desteklenmektedir (açık kaynak teknolojisi kullanmanın avantajı ile). JavaScript, Java, Go, C, C++, C#, Python, Objective-C, PHP gibi diller ve hemen hemen tüm ünlü diller bunu destekler.
7. Genişletebilirlik
Redis, canlı bir topluluk tarafından desteklenen açık kaynaklı bir projedir. Redis açık standartlara dayalı olduğundan, açık veri biçimlerini desteklediğinden ve zengin bir istemci grubuna sahip olduğundan, satıcı veya teknoloji kilitlenmesi yoktur.
Redis’in Dezavanatajları Nelerdir?
Her kaynak gibi Redis’in de avantajlarının yanı sıra birkaç dezavantajı vardır. Redis’i kullanırken karşılaşılabilecek bazı önemli zorluklar aşağıdaki şekildedir:
1. Temel güvenlik düzeyi
Redis, yalnızca bulut sunucusu düzeyinde temel güvenlik (erişim hakları gibi) sağlar. RDBMS, ayrıntılı, nesne başına erişim kontrol listeleri sağlar (role management olarak da bilinir).
2. Esneklik
Redis’te sorgulama dili yoktur, sadece komutlar vardır. İlişkisel cebir için herhangi bir destek de yoktur. Kişi herhangi bir geçici sorgu gönderemez. Tüm veri erişimlerinin bir geliştirici tarafından öngörülmesi ve uygun veri erişim yolları tasarlanması gerekir. Bu nedenle esnekliğin kaybolduğuna inanılır.
3. Veri yönetimi
Tüm veriler belleğe sığmalıdır. RDBMS genellikle disklerdeki bilgi ve verilerin önbellek kısmını bellekte saklar. Bir RDBMS kullanarak, sahip olduğu bellekten daha fazla veri yönetilebilir. Redis ile bu mümkün değildir.
4. Kalıcılık
Redis’in kalıcılık için yalnızca 2 seçeneği vardır: Normal anlık görüntü alma ve yalnızca ekleme dosyaları. Bunların hiçbiri, yineleme/geri alma günlük kaydı, belirli bir noktada kurtarma, blok sağlama toplamı, flashback yetenekleri vb. sunan gerçek işlem sunucusu kadar güvenli değildir.
5. İstemci desteği
İstemcilerin Redis kümelerini desteklemek için değişiklikler yapması gerekir. Redis kümeleri uzun süredir olmasına rağmen, hala onu desteklemeyen bazı müşteriler vardır.
6. Destek
Bağımsız veri tabanlarının aksine, Redis Clusters (Kümeleri) yalnızca tek bir veri tabanını (veri tabanı 0) destekler. Redis’te SELECT komutuna izin verilmez.
7. Ölçeklenebilirlik
Benzersiz bir Redis örneğinin ölçeklenebilir olduğu söylenemez. Tek iş parçacıklı modda yalnızca bir CPU çekirdeğinde çalışır. Ölçeklenebilirlik elde etmek için bir dizi Redis örneğinin dağıtılması ve başlatılması gerekir. Dağıtım ve paylaşım istemci tarafında yapılır (bir geliştiricinin bu yönlerle ilgilenmesi gerekir). RDBMS’lerin çoğu daha fazla ölçeklenebilirlik sunar. Bağlantı düzeyinde paralellik sağlar. Çok çekirdekli makinelerin faydalarından yararlanarak çok işlemli veya hatta çok iş parçacıklı (MySQL, Microsoft SQL Server gibi) oldukları söylenir.
Redis’in Diğer Veri Tabanı ve Önbelleğe Alma Çözümleri İle Karşılaştırması
Tabii ki Redis, piyasadaki tek veri tabanı ve önbelleğe alma çözümü değildir. Hazelcast, Apache Ignite ve Memcached gibi Redis alternatifleri de vardır.
Hem Memcached hem de Redis, yüksek performanslı anahtar – değer veri tabanlarıdır. Ancak Redis’ten farklı olarak Memcached, verileri yalnızca düz dize anahtarlarında depolayabilir. Redis ise veriler için birden fazla depolama biçimini destekler ve verileri diske iki farklı şekilde (AOF ve RDB) otomatik olarak yazabilir. Redis ayrıca önbellek çıkarma ilkeleri üzerinde daha esnek kontrol sağlar ve kullanılabilirliği iyileştirmek ve beklenmeyen çökmelere dayanmak için veri çoğaltmayı destekler.
Redis, Hazelcast ve Apache Ignite gibi alternatiflerle karşılaştırıldığında da daha iyidir. Örneğin, ne Hazelcast ne de Ignite, Redisson gibi bir üçüncü taraf Redis Java istemcisi ile erişebildiğiniz zengin Java dağıtılmış nesneleri ve koleksiyonları dizisine sahip değildir.
Özellikle Redis ve Hazelcast arasında önemli teknik farklılıklar vardır. Redis tek iş parçacıklıdır, Hazelcast ise çok iş parçacıklıdır. Redis, çeşitli veri türlerini verimli bir şekilde yönetmek için jemalloc bellek ayırıcıyı da kullanırken, Hazelcast, daha büyük uygulamaların performansını etkileyebilecek verileri yığın üzerinde depolar.
Redis Cache ve Depolama İçin En İyi Yöntem Olabilir Mi?
Önbellek, gelecekteki verilere daha hızlı erişilebilmesi için verilerin depolandığı geçici depolamadır. Dolayısıyla önbelleğe alma, verileri önbellekte saklama işlemidir. Redis, disk veya SSD ile veri erişim gecikmesini, yüksek aktarım hızını azaltmak ve veri tabanı ile uygulamanın yükünü hafifletmek için yüksek düzeyde kullanılabilir bir bellek içi önbellek uygulamak için iyi bir seçimdir. Web sayfası önbelleğe alma, veri tabanı sorgu sonuçlarını önbelleğe alma, kalıcı oturum önbelleğe alma ve görüntüler, dosyalar ve meta veriler gibi sık kullanılan nesnelerin önbelleğe alınması, Redis ile önbelleğe alma çözümlerinin popüler örnekleridir.
Özetle diyebiliriz ki, Redis’i iş uygulamalarınız için uygulayacağınız alanları öğrendikten sonra, bu teknolojinin ihtiyaçlarınıza fayda sağlayabilecek ölçeklenebilirlik, yüksek kullanılabilirlik ve optimum performanstan sağlayabileceği güç ve hızdan yararlanabilirsiniz. Redis, mevcut diğer veri tabanlarına kıyasla o kadar eski olmayabilir, ancak topluluk tarafından geniş çapta benimsenmesi ve geniş desteği, bu aracın ne kadar güçlü ve verimli olabileceğini kanıtlar niteliktedir.