Redis, anahtar-değer (key-value) şeklinde verileri saklayıp sorgulayabildiğimiz açık kaynaklı no-SQL bir veritabanı yazılımıdır. En belirgin özelliği tim verileri RAM’de tutuyor olmasıdır. Bu da çok hızlı, düşük gecikmeli okuma ve yazma yapılabilmesine olanak sağlamaktadır.
Redis Veri Tipleri
- String: En temel veri tipidir. Bir dizi karakterleri ve metinsel ifadeleri tutmak için kullanılır.
- List: Eklenme sırasına göre string ifadeleri sıralı olarak tutan veri tipidir.
- Set: Sırasız şekilde string ifadeleri benzersiz (unique) olarak tutan veri yapısıdır.
- Hash: Anahtar-değer şeklinde çok sayıda bilgileri tutan nesne tipidir.
- Sorted Set: Sıranın korunduğu benzersiz string türünden ifadeleri tutan veri yapısıdır.
- Stream: Yalnızca sondan ekleme yapılabilen sıralı şekilde kayıt tutan veri yapısıdır.
- Geospotial: Coğrafi koordinat saklayabilen veri yapısıdır.
Bu yazıda yalnızca en çok kullanılan temel tiplere yer verdim. Detaylı bilgiler için redis sayfasına göz atabilirsiniz.
Redis Kullanım Alanları
Redis oldukça hızlıdır fakat verileri RAM’de sakladığından bilgisayarınızın / sunucunuzun kapanması halinde tüm verilerinizi kaybedersiniz. Bu sebepten ötürü kaybetmeniz halinde hayati bir sorun yaşamayacağınız, fakat kaydetmek ve hızlıca tekrar erişmek isteyeceğiniz verileri Redis’te saklayabilirsiniz. Bu sebepten ötürü yaygın olarak şu amaçlar için Redis tercih edilmektedir.
- Önbellek saklama (Caching): Kullanıcının uygulamadan daha önce istemiş olduğu, veya istemesi kuvvetle muhtemel verileri önbellekte saklarız. Böylece tekrar tekrar ağ trafiği, hesaplama, sabit diskten okuma/yazma gibi maliyetli operasyonları tekrar tekrar yapmaktan kaçınmış oluruz. Redis ise adeta bu iş için biçilmiş bir kaftan olarak karşımıza çıkmaktadır.
- İş Kuyrukları (Worker Queues): Çok sayıda kullanıcıya hizmet verdiğimiz ve maliyetli işlemler yapmamız gereken durumlarda, bu maliyetleri işlemlerin, diğer kullanıcıları bloklamamak amacıyla iş kuyrukları pek çok sistem tarafından kullanılmaktadır. Çok sayıda kullanıcımıza mail göndermek istediğimizi düşünelim. Bu senaryoda her bir istek için mail atılmasını beklemek yüksek yanıt sürelerine sebep olacaktır. Bunun yerine mail atılması işini bir kuyruğa ekleyerek. Mail atılması işinin sürekli bu kuyruğa iş gelmesini bekleyen ayrı bir servis tarafından yapılması, sistemin verimliliğini arttıracak ve çok çok daha iyi bir kullanıcı deneyimi sunacaktır. Redis listeleri bu amaç için kullanıma oldukça uygundur.
- Session Storage: Session’lar, kullanıcımızın uygulamamıza bağlı bulunduğu müddetçe saklanan, kullanıcı-uygulama etkileşimi ile ilgili verileri geçici olarak tutan bir saklama şeklidir. Örneğin kullanıcının oturum açma bilgileri, kullanıcının uygulamada yaptığı yer değişiklikler, seçili teması, dil seçeneği vb. bilgiler bu session’lar aracılığı ile saklanmaktadır. Redis hash tipi bu tarz uygulamalar (use case) için uygundur.
Redis Komutları
Redis’e bağlanmak ve işlemler yapmakiçin redis-cli aracı kullanılabilir. Varsayılan olarak redis-cli aracı 127.0.0.1 adresine 6379 numaralı port’tan bağlanmaya çalışacaktır. Farklı bir adres ve port belirtmek için komut şu şekilde çalıştırılabilir.
redis-cli -h <adres> -p <port>
Redis’te farklı veri tipleri için işlemler yapan farklı komutlar bulunmaktadır. En çok kullanılan tipler için kullanılan en temel komutlara bir göz atalım.
String Operasyonları
- SET <anahtar> <değer>: Veri saklamak için kullanılır.
- GET <anahtar>: Kaydedilen veriyi almak için kullanılır.
List Operasyonları
- LPUSH <anahtar> <değer>: Listenin başına ekleme yapmak için kullanılır.
- RPUSH <anahtar> <değer>: Listenin sonuna ekleme yapmak için kullanılır.
- LPOP <anahtar>: Listenin başındaki elemanı verir ve elemanı siler.
- RPOP <anahtar>: Listenin sonundaki elemanı verir ve elemanı siler.
- LLEN <anahtar>: Listenin uzunluğunu verir.
- LRANGE <anahtar> <başlangıç> <bitiş>: Listenin başlangıç index’i ile bitiş index’i arasındaki elemanlarını verir. Başlangıç ve bitiş index’leri dahil edilir.
Set Operasyonları
- SADD <anahtar> <değer>: Set’e yeni eleman ekler.
- SREM <anahtar> <değer>: Verilen elemanı set’ten kaldırır.
- SISMEMBER <anahtar> <değer>: Verilen elemanın set’te olup olmadığını verir
- SINTER <set listesi>: Verilen listelerdeki ortak elemanları verir
- SCARD <anahtar>: Sette bulunan eleman sayısını verir.
Hash Operasyonları
- HSET <anahtar> <eleman> <değer>: Verilen nesnenin verilen elemanını verilen değer olarak değiştirir.
- HGET <anahtar> <eleman>: Verilen nesnenin istenilen elemanını verir.
- HMGET <anahtar> <eleman listesi>: Verilen elemanın listede bulunan bütün elemanlarını verir.
Diğer veri tipleri için de ön ekler kullanarak benzer operasyonlar yapılabilmektedir. Detaylı bilgiler için Redis dökünmentasyonunu inceleyebilirsiniz.