Redis Nedir? Redis Cache, Pub/Sub, RDB, AOF ve Angular & Node.js Entegrasyonu

Redis ile önbellekleme, mesajlaşma (Pub/Sub), veri kalıcılığı (RDB & AOF) ve Angular & Node.js entegrasyonunu adım adım öğrenin.

Redis Cache Node.js Angular Pub/Sub

Redis Nedir ve Ne İşe Yarar?

Redis (Remote Dictionary Server), RAM tabanlı (in-memory) çalışan, açık kaynaklı bir veri yapısı sunucusudur. Milisaniye seviyesinde erişim süresi sunarak, yüksek performans isteyen web uygulamaları, gerçek zamanlı sistemler ve mikroservis mimarilerinde yoğun şekilde kullanılır.

Redis; cache (önbellek), gerçek zamanlı mesajlaşma, oturum yönetimi, anlık analitik ve dağıtık sistemler için ideal bir çözümdür.

Redis’in Yaygın Kullanım Alanları

  • Web ve API önbellekleme: Sık kullanılan sayfalar, HTML parçaları, JSON cevaplar.
  • Bildirim ve sohbet altyapısı: Gerçek zamanlı sohbet, bildirim gönderimi, Pub/Sub yapıları.
  • Oyun sunucuları: Liderlik tabloları, oturum verileri, anlık skor takibi.
  • E-ticaret: Stok yönetimi, kampanya verileri, sepet bilgileri.
  • Anlık metrik toplama: Trafik, tıklama, görüntülenme gibi metriklerin tutulması.
  • JWT ve oturum yönetimi: Kullanıcı oturumlarını hızlı ve güvenli bir şekilde yönetme.
Özetle: Redis, veritabanınızla uygulamanız arasında yüksek hızlı bir katman oluşturur. Hem performansı artırır hem de veritabanı yükünü azaltır.

Redis Cache Nasıl Kurulur? En Etkili Stratejiler

Redis cache, sık erişilen verilerin RAM üzerinde tutulmasını sağlayarak, veritabanına yapılan sorgu sayısını azaltır. Böylece hem backend performansı artar hem de Core Web Vitals metriklerinden LCP (Largest Contentful Paint) ve TTFB (Time To First Byte) değerlerinde gözle görülür iyileşme sağlanır.

1. Cache-aside (Lazy Loading) Stratejisi

En yaygın Redis cache modeli cache-aside ya da diğer adıyla lazy loading stratejisidir:

  1. Uygulama önce veriyi cache’ten (Redis) okumayı dener.
  2. Anahtar bulunamazsa (cache miss), veri kaynak sistemden (veritabanı veya API) alınır.
  3. Alınan veri cache’e yazılır ve belirli bir TTL değeri atanır.
  4. Sonraki isteklerde veri doğrudan cache’ten okunur.

2. TTL (Time To Live) ve Veri Geçerlilik Süresi

TTL, bir anahtarın cache’te ne kadar süreyle tutulacağını belirler. Belirlenen süre sonunda Redis anahtarı otomatik olarak siler. Bu sayede:

  • Eskimiş verilerin otomatik olarak temizlenmesi sağlanır.
  • RAM kullanımı daha kontrollü olur.
  • Özellikle çok sık değişmeyen ama çok okunan veriler için idealdir.

3. Cache Invalidation (Geçersiz Kılma)

Kritik veriler değiştiğinde, ilgili cache anahtarlarının manuel olarak temizlenmesi gerekir. Aksi halde kullanıcılar eskimiş veriyi görmeye devam eder. En temel invalidation yöntemi:


DEL post:123
        

Uygulama mantığında veri güncelleme veya silme işlemi yapıldığında, ilgili cache anahtarları da DEL komutuyla temizlenmelidir.

4. Basit Redis Cache Komutlarına Örnek


# Basit Redis cache işlemleri
SET post:123 "<html>...</html>" EX 300
GET post:123
DEL post:123
        

Örnek Kullanım Alanları

  • Kullanıcı profilleri: profile:{id}
  • Ürün listeleri: products:category:{id}
  • HTML parçaları / sayfa snapshot’ları
  • Rapor verileri
  • JWT veya session token’ları

Redis Server ve Sentinel ile Yüksek Erişilebilirlik

redis-server, istemcilerden gelen komutları işleyen ana süreçtir. Üretim ortamlarında, Redis tek bir sunucu üzerinde çalıştırıldığında tek hata noktası (SPOF) haline gelebilir. Bu nedenle:

  • Redis Sentinel ile otomatik failover,
  • Redis Cluster ile yatay ölçeklendirme

yaygın olarak kullanılan yaklaşımlardır.

Redis Sunucusunu Başlatma ve Servis Kontrolü


# Redis başlatma örneği
redis-server /etc/redis/redis.conf

# Servis kontrolü
systemctl status redis
systemctl start redis
        

Redis Sentinel ile Otomatik Failover

Sentinel, Redis sunucularını izleyen ve ana sunucu çöktüğünde (master down) otomatik olarak yedek bir node’u yeni master olarak devreye alan bir bileşendir.

  • Master’ı düzenli olarak sağlık kontrolünden geçirir.
  • Master erişilemez olduğunda yeni master seçer.
  • İstemcilerin yeni master’a yönlendirilmesini sağlar.

RDB ve AOF: Redis’te Veri Kalıcılığı Yöntemleri

Redis, varsayılan olarak in-memory çalışsa da, veri kaybını en aza indirmek için diske yazılabilen iki temel mekanizma sunar: RDB ve AOF.

Yöntem Avantajı Dezavantajı
RDB (Snapshot) Hızlı başlatma, daha düşük disk kullanımı, periyodik snapshot alma. Snapshot sonrası yapılan son yazmalar kaybolabilir.
AOF (Append Only File) Daha yüksek veri dayanıklılığı, her yazma işlemi kayıt altına alınır. Daha fazla disk alanı kullanır ve çok büyük dosyalarda geri yükleme süresi artabilir.

Üretim ortamlarında genellikle en iyi yaklaşım: RDB ve AOF yöntemlerini birlikte kullanıp, hem performans hem de veri güvenliği arasında denge kurmaktır.

Redis Pub/Sub ile Gerçek Zamanlı Bildirim Sistemi

Pub/Sub (Publish/Subscribe) modeli, bir yayıncıdan (publisher) çıkan mesajların, ilgili kanala abone olmuş (subscriber) tüm istemcilere anında iletilmesini sağlar.

Pub/Sub Nerelerde Kullanılır?

  • Canlı sohbet uygulamaları
  • Gerçek zamanlı bildirim sistemleri (like, yorum, mesaj bildirimi)
  • Anket ve oylama uygulamaları
  • Gerçek zamanlı dashboard’lar

Redis Pub/Sub Örnek Komutlar


# Yayıncı (publisher)
PUBLISH haberler "Merhaba Redis"

# Abone (subscriber)
SUBSCRIBE haberler
        

Herhangi bir istemci haberler kanalına abone olduğunda, bu kanala gönderilen tüm mesajları anında alır.

Angular ve Node.js ile Redis Entegrasyonu

Güvenlik ve mimari sebeplerle, tarayıcıdan doğrudan Redis’e bağlanmak önerilmez. Bunun yerine, Angular gibi frontend framework’leri, Node.js (Express veya NestJS) tabanlı bir backend üzerinden Redis ile haberleşir.

Node.js (Express) ile Redis Kullanımı

Aşağıdaki örnekte, kullanıcı profil verisi Redis cache üzerinden sunulmaktadır:


import express from "express";
import { createClient } from "redis";

const app = express();
const redis = createClient();

redis.on("error", (err) => {
  console.error("Redis bağlantı hatası:", err);
});

(async () => {
  await redis.connect();
})();

// Basit profil API'si
app.get("/api/profile/:id", async (req, res) => {
  const key = `profile:${req.params.id}`;

  try {
    // 1. Cache'ten oku
    let data = await redis.get(key);

    if (!data) {
      console.log("Cache miss, veritabanından veri çekiliyor...");

      // 2. Veri kaynaktan çekiliyormuş gibi simule edelim:
      data = JSON.stringify({ id: req.params.id, name: "Ada", role: "Developer" });

      // 3. Cache'e yaz (300 saniye TTL)
      await redis.setEx(key, 300, data);
    }

    // 4. Cevabı döndür
    res.json(JSON.parse(data));
  } catch (error) {
    console.error("Profil getirirken hata:", error);
    res.status(500).json({ error: "Sunucu hatası" });
  }
});

app.listen(3000, () => {
  console.log("Sunucu 3000 portunda çalışıyor");
});
        

Angular Tarafında Kullanım

Angular uygulaması doğrudan Redis ile değil, yukarıdaki gibi Node.js API’si ile konuşur. Örneğin bir ProfileService ile bu API’ye istek atabilirsiniz:


// Angular profile.service.ts (örnek)
import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Observable } from "rxjs";

@Injectable({ providedIn: "root" })
export class ProfileService {
  constructor(private http: HttpClient) {}

  getProfile(id: string): Observable<any> {
    return this.http.get(`/api/profile/${id}`);
  }
}
        

Bu yapı sayesinde:

  • Redis sadece backend tarafından erişilir ve daha güvenli hale gelir.
  • Angular tarafında cache’li, hızlı API cevapları elde edilir.
  • Core Web Vitals metriklerinde önemli iyileşmeler sağlanır.

Redis Performansını Artırmak İçin 7 İpucu

Redis zaten yüksek performanslı bir sistemdir; ancak yanlış yapılandırma ve veri modelleme hataları performans kaybına neden olabilir. Aşağıdaki ipuçları, üretim ortamı için pratik bir rehber niteliğindedir:

  1. Uygun TTL ve invalidation politikaları kullanın.
    Gereksiz uzun TTL değerleri RAM tüketimini artırırken, çok kısa TTL değerleri sürekli cache miss’e neden olabilir.
  2. Veri tiplerini doğru seçin (String, List, Set, Hash).
    Örneğin kullanıcı profilleri için HASH, sıralı veriler için LIST, benzersiz elemanlar için SET kullanın.
  3. Büyük JSON veya HTML verilerinde sıkıştırma kullanın.
    Örneğin, Node.js tarafında gzip veya brotli ile sıkıştırarak Redis’e yazabilirsiniz.
  4. Cluster veya Sentinel ile ölçeklendirme yapın.
    Artan trafik ve veri yükü için dikey büyüme yerine yatay ölçeklendirme tercih edin.
  5. RAM ve CPU kullanımını düzenli izleyin.
    INFO komutu ile istatistikleri takip edin, gerekli durumlarda sınırlandırmalar yapın.
  6. Gereksiz anahtarları periyodik olarak temizleyin.
    SCAN komutu ile anahtarları filtreleyip, kullanımdan kalkmış olanları silebilirsiniz.
  7. İzleme için MONITOR komutunu dikkatli kullanın.
    MONITOR, tüm komutları gösterir; debug ve test ortamında çok faydalıdır ancak yoğun üretim ortamında dikkatli kullanılmalıdır.

Sık Sorulan Sorular (FAQ)

Redis nedir?

Redis, RAM tabanlı bir veri deposudur. Cache, mesajlaşma, oturum yönetimi ve gerçek zamanlı veri işleme senaryolarında kullanılır. Düşük gecikmeli yapısı sayesinde yüksek trafikli web projelerinde tercih edilir.

Redis cache nedir?

Redis cache, sık kullanılan verilerin bellekte tutulmasını sağlayan bir önbellekleme çözümüdür. Böylece veriye milisaniyeler içinde erişilebilir ve veritabanı üzerindeki okuma yükü önemli ölçüde azalır.

Redis-server nedir?

redis-server, istemcilerden gelen tüm komutları yöneten ana süreçtir. Sentinel ve Cluster ile birlikte kullanıldığında yüksek erişilebilirlik ve ölçeklenebilirlik sağlar.

RDB ve AOF farkı nedir?

RDB, belirli aralıklarda tüm verinin snapshot’ını alır ve diske yazar. AOF ise her yazma komutunu tek tek kaydeder. RDB daha az disk alanı kullanırken, AOF daha yüksek veri dayanıklılığı sağlar. Üretim ortamlarında genellikle her ikisi birlikte kullanılır.

Angular ile Redis nasıl çalışır?

Angular uygulaması Redis’e doğrudan bağlanmaz. Bunun yerine, Node.js (Express veya NestJS) gibi bir backend katmanı Redis ile iletişim kurar. Angular tarafı ise bu backend’e HTTP istekleri göndererek cache’lenmiş, hızlı API cevapları alır.

Beğendiysen bir çay ısmarlayabilirsin ☕

Bana çay ısmarla

Devops ile ilgili yorumlar

Yorum Paylaş

EMail Zorunlu alanlar * *