1. Anasayfa
  2. Yazılım Genel
Trendlerdeki Yazı

Redis Nedir? Data Types & Pub/Sub

Redis Nedir? Data Types & Pub/Sub
0

Redis Tech Talk

Data Types & Pub/Sub

🚀 Redis Nedir?

REmote DIctionary Server

Redis, verileri RAM’de saklayan açık kaynaklı, in-memory çalışan bir NoSQL veritabanıdır.

📝 Türü

NoSQL Veritabanı

🗝️ Modeli

Key-Value (Anahtar-Değer)

⚡ Çalışma Prensibi

Bellek (RAM) tabanlı çalışır, yani veriler öncelikle bellekte tutulur. Bu da çok yüksek hız sağlar.

🔧 Çok Yönlü

String, Hash, List, Set, Sorted Set veri yapıları

💾 Kalıcılık

RDB (snapshot) ve AOF (yazma geçmişi) desteği

📡 Pub/Sub

Gerçek zamanlı mesajlaşma sistemi

🔤 Veri Yapısı #1: Strings (Metinler)

Nedir?

En basit veri tipidir. Bir anahtara, bir metin veya sayısal değer atarsınız.

💡 Senaryo

Kullanıcının token bilgisini sakla.

Kod Örneği

🗂️ Veri Yapısı #2: Hashes (Sözlükler)

Nedir?

Alanlar ve değerlerden oluşan veri yapısı, tıpkı JSON objesi gibi. Bir anahtar altında birden fazla alt anahtar-değer çifti.

💡 Senaryo

Kullanıcı profil bilgileri (ad, soyad, e-posta). Her alan için ayrı STRING’ten çok daha verimli.

Kod Örneği

📋 Veri Yapısı #3: Lists (Listeler)

Nedir?

Elemanların eklendiği sırayla tutulduğu bir veri yapısıdır. Bir listenin başına veya sonuna eleman ekleyebilir, çıkarabilirsiniz.

💡 Senaryo

İş Kuyrukları (Task Queues) veya bir kullanıcının yaptığı son 10 işlemi tutan bir akış listesi.

Kod Örneği

🎯 Veri Yapısı #4: Sets (Kümeler)

Nedir?

Tıpkı matematikteki gibi, benzersiz ve sırasız elemanların olduğu bir veri kümesidir.

💡 Senaryo

Bir blog yazısını beğenen benzersiz kullanıcıları tutmak veya bir e-ticaret sitesindeki bir ürüne ait etiketleri yönetmek.

⚡ List vs Set Farkı

List: Sıralı, duplicate (tekrarlı) eleman olabilir → [‘a’, ‘b’, ‘a’] ✅
Set: Sırasız, sadece benzersiz elemanlar → {‘a’, ‘b’} ✅

Kod Örneği

🏆 Veri Yapısı #5: Sorted Sets (Sıralı Kümeler)

Nedir?

Her elemanın benzersiz olduğu, ancak her bir elemanın ilişkili bir “skor” ile birlikte saklandığı ve bu skorlara göre otomatik olarak sıralandığı bir kümedir.

💡 Senaryo

Oyunlardaki en iyi oyuncular listesi (leaderboard), en çok satan ürünler listesi veya kullanıcıların popülerlik skorları.

Kod Örneği

🌍 Bonus: Geospatial Indexes (Coğrafi Uzamsal İndeksler)

Nedir?

GPS koordinatlarını (enlem, boylam) saklayan ve bu koordinatlar üzerinde “bana en yakın X şeyi bul” gibi sorguları hızlıca yapmamızı sağlayan özel bir veri yapısıdır.

💡 Senaryo

Bir restoranın konumuna en yakın 5 kuryeyi bulmak.

Kod Örneği

📡 Redis Pub/Sub (Yayınla/Abone Ol)

Nedir?

Uygulamalar arasında gerçek zamanlı mesajlaşma sağlayan bir modeldir. Kanallar (channels) üzerinden mesaj iletimi yapılır.

💡 Kavramlar

Publisher: Mesajı yayınlayan
Subscriber: Kanala abone olan
Channel: Mesajların iletim kanalı

🔹 Asenkron Mesajlaşma Mantığı

⚡ Asenkron Yapı

• Mesajlar gerçek zamanlı iletilir
• Publisher mesajı gönderir ve beklemez
• Subscriber’lar mesajları bağımsız alır
• Hiçbiri diğerini bloklamaz

⚠️ Kalıcı Değil!

• Mesajlar sadece o anda aktif olan subscriber’lara gider
• Offline olan istemciler mesajı kaçırır
• Redis mesajları saklamaz
• “Fire and forget” mantığı

Kod Örneği – Bildirim Sistemi

🎯 Pub/Sub Örnek Senaryolar

🏗️ Event-Driven Architecture – E-Ticaret Siparişi

📦 Sipariş Verildi!

Order Service
“siparis-olusturuldu” kanalına
mesaj yayınlar

⚡ Anında Tetiklenen Servisler:

  • 📧 Email Servisi: Sipariş onay maili gönderir
  • 📱 SMS Servisi: Kısa mesaj bildirimi atar
  • 📊 Analytics Servisi: Satış verilerini günceller
  • 📦 Warehouse Servisi: Stok düşürür, paketleme başlatır
  • 💳 Payment Servisi: Ödeme takibini başlatır

🔄 Tüm bu işlemler PARALEL ve BİRBİRİNDEN BAĞIMSIZ çalışır!

📻 Radyo İstasyonu – Binlerce Dinleyici

🎵 DJ Yayında!

Radyo İstasyonu
“radyo-100-3” kanalından
şarkı yayını yapıyor

🔊 Dinleyici Deneyimi:

  • 👥 Binlerce dinleyici aynı anda “radyo-100-3” kanalını dinliyor
  • 📱 Mobil uygulamalar şarkı bilgilerini anında alıyor
  • 🚗 Araç sistemleri current track’i gösteriyor
  • 💻 Web siteleri “şu an çalıyor” bilgisini güncelliyor
  • ⏰ Geç bağlananlar o anki şarkıyı duyar (öncekini kaçırır)

📡 DJ broadcast yapar, kim dinliyorsa o anda alır!

💬 Canlı Sohbet Uygulaması – Ölçeklenebilir Chat

💬 Mesaj Gönderildi!

Socket.io Server
“sohbet-odasi-1” kanalına
mesajı yayınlar

🌐 Çoklu Server Yapısı:

  • 🖥️ Server 1: Ahmet ve Ayşe’nin WebSocket bağlantıları
  • 🖥️ Server 2: Mehmet ve Fatma’nın bağlantıları
  • 📡 Redis Pub/Sub: Serverlar arası mesaj köprüsü
  • ⚡ Anında senkronizasyon: Hangi serverda olursa olsun herkes görür
  • 🚀 Horizontal scaling: Yeni server eklense de sorun yok

🔗 Redis olmadan: Sadece aynı server’daki kullanıcılar mesajı görür!

🎁 Bonus: Mesajlaşma Teknolojileri Karşılaştırması

Özellik Redis Pub/Sub RabbitMQ (veya Kafka) Socket.IO
Rolü Mesaj Yayıncısı / Veri Deposu Dedicated Mesaj Broker’ı Client-Server İletişim Kütüphanesi
Temel Görev Anlık, düşük gecikmeli broadcast. Güvenli, garantili, sıraya alma (queuing). Tarayıcı ve sunucu arasında gerçek zamanlı, çift yönlü iletişim.
Mesaj Saklama Yok. Abone offline ise mesajı kaçırır. Var. Mesajlar okunana kadar saklanır. Yok. Sadece aktif bağlantıya iletir.
Kullanım Alanı Canlı skorlar, anlık bildirimler, chat uygulamaları. Arka plan işleri (e-mail, resim işleme), kritik işlemler. Frontend’den backend’e gerçek zamanlı veri akışı.
Mimari Fit Sunucu içi (server-to-server) ve Socket.IO ile birlikte sunucu-client iletişimi. Sunucu içi (server-to-server) ve mikroservisler arası iletişim. Sadece Sunucu-Tarayıcı arasında bir köprü.
Örnek Senaryo Borsadan anlık hisse fiyatı yayını. Bankacılıkta para transferi işleminin sıraya alınması. Müşterinin web sitesinde kuryenin konumunun canlı takibi.

💡 Bu teknolojiler rakip değil, tamamlayıcı! Gerçek projelerde genellikle birlikte kullanılırlar:

Redis Pub/Sub: Hızlı, anlık bildirimler için

RabbitMQ/Kafka: Kritik, garantili işlemler için

Socket.IO: Frontend ile backend arasında köprü olarak

Bu Yazıya Tepkiniz Ne Oldu?
  • 2
    be_endim
    Beğendim
  • 1
    alk_l_yorum
    Alkışlıyorum
  • 0
    e_lendim
    Eğlendim
  • 0
    d_nceliyim
    Düşünceliyim
  • 0
    _rendim
    İğrendim
  • 0
    _z_ld_m
    Üzüldüm
  • 0
    _ok_k_zd_m
    Çok Kızdım

Yazılım Geliştiricisi. Öğrendiği bilgileri elinden geldiğince paylaşmaya çalışıyor.

Yazarın Profili
Paylaş

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