Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

Redis, verileri RAM üzerinde saklayan çok hızlı bir key–value veri deposudur. Düşük gecikme süresi sayesinde genellikle cache, oturum yönetimi, sayaçlar ve gerçek zamanlı veri işlemleri için kullanılır. Basit yapısı, güçlü veri yapıları ve yüksek performansı sayesinde modern backend sistemlerinde yaygın olarak tercih edilir. 🚀
Redis, temel olarak bir in-memory key-value veri tabanıdır.
Bunu daha anlaşılır şekilde söyleyelim:
Redis, veriyi RAM içinde tutan çok hızlı bir veri saklama sistemidir.
Çoğu veritabanı veriyi disk üzerinde saklar. Redis ise veriyi RAM’de tuttuğu için çok hızlıdır.
Bu yüzden Redis genellikle şu amaçlarla kullanılır:
Kısaca Redis, yüksek performans gerektiren işlemler için kullanılan bir veri katmanıdır.
Redis’in hızlı olmasının birkaç temel sebebi vardır.
Redis komutları tek bir thread üzerinde çalıştırır.
Bu ilk başta garip gelebilir.
“Tek thread ise nasıl hızlı?”
Ama burada önemli bir avantaj vardır:
Redis her komutu sırayla işler.
Örneğin:
Client A → increment counter
Client B → increment counter
Redis bu işlemleri sırayla çalıştırır.
Sonuç:
counter = 2
Her işlem atomik şekilde gerçekleşir.
Bu yüzden Redis ile concurrency yönetmek çok daha basittir.
Redis veriyi disk yerine RAM’de tutar.
Bu nedenle erişim süresi çok düşüktür.
Yaklaşık olarak:
| Sistem | Ortalama Latency |
|---|---|
| Disk database | ms seviyesinde |
| Redis | sub-millisecond |
Bu da Redis’i çok hızlı yapar.
Redis birden fazla komutu tek seferde göndermeye izin verir.
Buna pipelining denir.
Örnek:
Normal kullanım:
SET a 1
GET a
INCR a
Her komut için ayrı network request yapılır.
Pipeline ile:
SET a 1
GET a
INCR a
Hepsi tek network paketinde gönderilebilir.
Bu da performansı artırır.
Redis sadece key-value saklamaz.
Birçok veri yapısını native olarak destekler.
En yaygın olanlar:
| Veri Yapısı | Kullanım |
|---|---|
| String | cache |
| List | queue |
| Hash | object saklama |
| Set | unique veri |
| Sorted Set | ranking |
| Stream | event log |
Örneğin bir leaderboard sistemi yapalım.
ZADD leaderboard 100 player1
ZADD leaderboard 200 player2
ZADD leaderboard 150 player3
En iyi oyuncuları almak:
ZREVRANGE leaderboard 0 2
Sonuç:
player2
player3
player1
Bu tarz işlemleri SQL ile yapmak çok daha zor olabilir.
Redis bunu çok kolaylaştırır.
Redis veriyi RAM’de tuttuğu için bir risk vardır:
Eğer sunucu kapanırsa veri kaybolabilir.
Bu yüzden Redis farklı persistence yöntemleri sunar.
Birçok sistem Redis’i sadece cache olarak kullanır.
Örnek mimari:
Client
|
API Server
|
Redis (Cache)
|
Database (Source of Truth)
Akış:
1️⃣ Redis’e bak
2️⃣ Cache hit → veriyi döndür
3️⃣ Cache miss → database’den al
4️⃣ Redis’e yaz
Redis düşerse:
Bu yüzden veri kaybı problem olmaz.
Redis belirli aralıklarla snapshot alabilir.
Örneğin:
Her 5 dakikada snapshot
Sunucu restart olursa Redis snapshot’tan yüklenir.
Ama son birkaç dakika veri kaybı olabilir.
Redis her yazma işlemini bir log dosyasına ekleyebilir.
Örneğin:
SET user:1 eray
INCR counter
Bu komutlar log’a yazılır.
Crash olursa Redis bu log’u tekrar çalıştırarak veriyi geri getirir.
Genelde şu ayar kullanılır:
fsync every second
Yani en fazla 1 saniyelik veri kaybı olabilir.
Başlangıçta çoğu sistem tek Redis instance ile başlar.
Ama trafik arttıkça ölçeklemek gerekir.
Bir Redis sunucusu:
Primary
Birden fazla replica:
Replica 1
Replica 2
Replica 3
Primary:
Replica:
Bu yöntem okuma performansını artırır.
Write yükü artarsa veri bölünür.
Örnek:
Redis 1 → user:1-1000
Redis 2 → user:1001-2000
Redis 3 → user:2001-3000
Uygulama hash kullanarak hangi Redis’e gideceğini belirler.
Buna client-side sharding denir.
Redis’in kendi cluster çözümü de vardır.
Özellikler:
Ama cluster yönetimi daha karmaşıktır.
Bu yüzden birçok şirket basit sistemlerde client sharding kullanır.
En yaygın kullanım.
API → Redis → Database
Amaç:
API’yi korumak için kullanılır.
Örnek:
IP başına 100 istek / dakika
Redis counter ile yapılabilir.
INCR api:user:123
EXPIRE api:user:123 60
Web uygulamalarında kullanıcı session’ları Redis’te tutulabilir.
Avantaj:
Oyunlar veya ranking sistemleri için.
Redis:
Sorted Set
ile bunu çok hızlı yapar.
Redis özellikle şu durumlarda çok faydalıdır:
Ama Redis genelde primary database değildir.
Çoğu sistemde Redis şu rolü oynar:
Hız katmanı (speed layer)
Redis’in popüler olmasının üç temel sebebi vardır:
1️⃣ Çok hızlıdır
Veriyi RAM’de tuttuğu için latency çok düşüktür.
2️⃣ Basit bir çalışma modeli vardır
Single-thread execution concurrency problemlerini azaltır.
3️⃣ Güçlü veri yapıları sunar
List, set, sorted set gibi yapılar birçok problemi kolaylaştırır.
Bu yüzden Redis günümüzde:
çok sık karşımıza çıkar.