Redis Pub/Sub Nedir?

Redis pub/sub, asenkron ve gerçek zamanlı iletişim için güçlü bir araçtır. Redis’in event based mesajlaşma modelidir. Bu model, publisher-subscriber ilişkisine dayanır ve birçok farklı senaryoda kullanılabilir.

Temel olarak, Redis pub/sub modelinde iki ana rol vardır:

  1. Publisher (Yayıncı): Belirli bir kanala veya konuya (channel/topic) bir mesaj yayımlayan bir istemcidir. Publisher ‘lar, belirli bir kanala mesaj göndererek bu kanala abone olan diğer istemcilere bilgi gönderebilirler.
  2. Subscriber (Abone): Belirli bir kanalı dinleyen ve o kanala yayımlanan mesajları alan bir istemcidir. Subscriber ‘lar, bir veya daha fazla kanala abone olarak, bu kanallardan gelen mesajları dinleyebilirler.
Redis pub/sub modelinin ana özellikleri şunlardır:
  • Asenkron İletişim: Publisher ‘lar mesajları anında yayımlar, aboneler bu mesajları asenkron olarak alır. Bu sayede, yayıncılar ve aboneler arasında gerçek zamanlı iletişim sağlanabilir.
  • Esneklik: Subscriber ‘lar, birden fazla kanala abone olabilirler ve her kanalda gelen mesajları dinleyebilirler. Aynı şekilde, bir yayıncı birçok farklı kanala mesaj gönderebilir.
  • Yayıncıya Geri Bildirim Yoktur: Publisher ‘lar, mesajlarını bir kanala yayımladıktan sonra, o mesajın hangi aboneler tarafından alındığını bilmezler. Bu, yayıncı ve aboneler arasında gevşek bir bağlantı (loose coupling) sağlar.
Uygulamaya Geçelim:

Konuyu detaylı inceleyebilmek için öncelikle Docker üzerinde yeni bir Redis container ayağa kaldıralım ve pub/sub ın ilk denemelerini terminal üzerinden yapalım. Bunun için VSCode terminali kullanacağım. Aşağıdaki komut satırı ile işlemlere başlayalım.

C#
docker run --name RedisTest -p 6379:6379 -d redis

Bu komut satırı docker üzerinde “RedisTest” isimli bir container oluşturur ve “redis” imajının deamon modunda (Konteynerin arka planda çalışmasını sağlayan bir flag) kurulumunu sağlar.

C#
docker exec -it containerID redis-cli

“redis-cli” yi çalıştırabilmek içinde yukarıdaki komut satırını çalıştırıyoruz. “containerID” yazdığım yere sizin container ID nize ne ise onu yapıştırmalısınız. Container Id sini Docker Desktop uygulaması üzerinden veya aşağıdaki kod satırı yardımıyla da elde edebilirsiniz.

C#
docker ps -aqf "name=RedisTest"   

Redis imizi ayağa kaldırdığımıza göre basit bir pub/sub iletişimi kurmayı deneyelim. “notification” adında bir kanala subscribe olalım ve publisher dan bu kanala mesaj göndermeyi deneyelim.

VSCode terminali açtım ve yanına bir terminal daha ekledim (Split Terminal, Ctrl+Shift+5). Üstteki ekran görüntüsünde sol tarafta publisher ‘ım var, sağ taraftaki subscriber ‘ımız. “notification” kanalına subscribe olduktan sonra publisher tarafından 3 tane mesaj gönderdim ve görüldüğü üzere mesajlar anlık olarak subscriber tarafına düştü. Akışın daha net anlaşılması için çektiğim şu videoya da bakabilirsiniz.

Gerçek hayat senaryoları için birkaç örnek vermem gerekirse pub/sub yapısı şunlar için alternatif olabilir;
– Bir sohbet uygulamasında kullanıcılar arasındaki mesajlaşmada,
– Herhangi bir sensörden alınan verilerin anlık iletiminde,
– E-ticaret sistemlerinde ürünlerin durum veya stok takip işlemlerinde.

Genel olarak pub/sub yapısına kısa da olsa bir giriş yaptık. .Net Core tarafında da StackExchange.Redis paketini kullanarak bu yapıyı kurgulayabilirsiniz.

Yeni bir yazıda görüşmek dileğiyle…

Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

Bir yanıt yazın

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