Redis logo with geometric shapes

Redis Nedir?

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:

  • Cache sistemi
  • Oturum yönetimi
  • Sayaçlar
  • Rate limiting
  • Leaderboard sistemleri
  • Queue ve messaging

Kısaca Redis, yüksek performans gerektiren işlemler için kullanılan bir veri katmanıdır.


Redis Neden Bu Kadar Hızlı?

Redis’in hızlı olmasının birkaç temel sebebi vardır.

1️⃣ Single Thread Çalışma Modeli

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:

  • Lock yok
  • Race condition yok
  • Thread synchronization yok

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.


2️⃣ RAM Üzerinde Çalışması

Redis veriyi disk yerine RAM’de tutar.

Bu nedenle erişim süresi çok düşüktür.

Yaklaşık olarak:

SistemOrtalama Latency
Disk databasems seviyesinde
Redissub-millisecond

Bu da Redis’i çok hızlı yapar.


3️⃣ Network Overhead Azaltma (Pipelining)

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 Bir Veri Yapısı Sunucusudur

Redis sadece key-value saklamaz.

Birçok veri yapısını native olarak destekler.

En yaygın olanlar:

Veri YapısıKullanım
Stringcache
Listqueue
Hashobject saklama
Setunique veri
Sorted Setranking
Streamevent 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’te Veri Kalıcılığı (Persistence)

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.


1️⃣ Cache Olarak Kullanmak

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:

  • Cache boşalır
  • Sistem tekrar doldurur

Bu yüzden veri kaybı problem olmaz.


2️⃣ Snapshot (RDB)

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.


3️⃣ Append Only File (AOF)

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.


Redis Nasıl Ölçeklenir?

Başlangıçta çoğu sistem tek Redis instance ile başlar.

Ama trafik arttıkça ölçeklemek gerekir.


1️⃣ Read Replicas

Bir Redis sunucusu:

Primary

Birden fazla replica:

Replica 1
Replica 2
Replica 3

Primary:

  • write işlemleri

Replica:

  • read işlemleri

Bu yöntem okuma performansını artırır.


2️⃣ Sharding

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.


3️⃣ Redis Cluster

Redis’in kendi cluster çözümü de vardır.

Özellikler:

  • otomatik sharding
  • failover
  • replica yönetimi

Ama cluster yönetimi daha karmaşıktır.

Bu yüzden birçok şirket basit sistemlerde client sharding kullanır.


Redis Gerçek Hayatta Nerelerde Kullanılır?
1️⃣ Cache

En yaygın kullanım.

API → Redis → Database

Amaç:

  • database yükünü azaltmak
  • response süresini düşürmek

2️⃣ Rate Limiting

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

3️⃣ Session Management

Web uygulamalarında kullanıcı session’ları Redis’te tutulabilir.

Avantaj:

  • hızlı erişim
  • çoklu server paylaşımı

4️⃣ Leaderboard

Oyunlar veya ranking sistemleri için.

Redis:

Sorted Set

ile bunu çok hızlı yapar.


Redis Ne Zaman Kullanılmalı?

Redis özellikle şu durumlarda çok faydalıdır:

  • yüksek trafik
  • hızlı response ihtiyacı
  • cache gereksinimi
  • distributed sistemler
  • real-time veri

Ama Redis genelde primary database değildir.

Çoğu sistemde Redis şu rolü oynar:

Hız katmanı (speed layer)


Sonuç

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:

  • yüksek trafikli sistemlerde
  • modern backend mimarilerinde
  • system design görüşmelerinde

çok sık karşımıza çıkar.


Kaynakça:

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir