asyncfunctionrenderPage(){const data =awaitgetPageDatas();return data;}
Bileşenler hazırlanıyor...
Not içeriği yükleniyor...
// Markdown dosyası okunuyor
// İçerik işleniyor
// Syntax highlighting hazırlanıyor
Redis Streams | Real-Time Data Processing Rehberi | Kubilay Bozak
Redis Stream Veri Türü
2025-07-18
25 min
Redis Streams ile real-time data processing, message passing ve event sourcing. XADD, XREAD komutları ile stream-based architectures.
Redis
Streams
Real-time
Processing
Events
Redis'in sunduğu en gelişmiş append-only log veri yapılarından biri olan Stream, time-series events ve real-time data processing için tasarlanmış sofistike bir veri türüdür. Stream, chronological ordering, unique message IDs, consumer groups ve persistent message queues özellikleri ile event sourcing, message streaming, real-time analytics ve distributed processing senaryolarında vazgeçilmez bir araçtır. Her message otomatik olarak timestamp-based unique ID alır ve stream içinde immutable olarak saklanır. Bu özelliği sayesinde event replay, audit trails, real-time monitoring ve microservices communication gibi modern architecture patterns'larını native olarak destekler.
📋 Redis Stream Veri Türü Özellikleri Tablosu
Özellik
Açıklama
Örnek
Append-only structure
Immutable, sadece ekleme yapılabilen log yapısı
Events sonradan değiştirilemez
Unique message IDs
Her message otomatik timestamp-sequence ID alır
1642678800000-0 (timestamp-sequence)
Consumer groups
Distributed message processing ve load balancing
XGROUP CREATE stream group $ MKSTREAM
Range queries
Zaman bazlı message range'leri okuyabilme
XRANGE events 1640995200000 1640998800000
Blocking operations
Real-time event listening ve streaming
XREAD BLOCK 0 STREAMS events $
Message acknowledgment
Delivered message tracking ve redelivery
XACK group consumer message-id
Persistent storage
Message'lar disk'te persist edilir
Restart sonrası messages korunur
Memory optimization
Configurable trimming ve automatic cleanup
XTRIM events MAXLEN ~ 1000
🎯 Redis Stream Kullanım Senaryoları
Kullanım Alanı
Açıklama
Redis Komutu Örneği
Event sourcing
Domain events'lerin sequential saklanması
XADD events * event_type "user_created"
Message queues
Asynchronous task processing
XADD tasks * task_type "send_email"
Real-time analytics
Live data streaming ve processing
XADD metrics * cpu_usage "75.5"
IoT data collection
Sensor verilerinin continuous collection
XADD sensors * temperature "23.5"
Audit trails
System activity logging ve compliance
XADD audit * action "user_login"
Chat applications
Real-time messaging systems
XADD chat:room123 * message "Hello"
Financial transactions
Transaction log ve reconciliation
XADD transactions * amount "100.50"
Game events
Player actions ve game state changes
XADD game:events * action "level_up"
Log aggregation
Centralized logging from multiple services
XADD logs * service "api" level "error"
CDC (Change Data Capture)
Database change tracking
XADD changes * table "users" op "UPDATE"
Stream'in en güçlü özelliklerinden biri, consumer groups mekanizmasıdır. Bu özellik sayesinde multiple consumers arasında load balancing, message acknowledgment ve redelivery işlemlerini otomatik olarak yönetebilirsiniz. Consumer group'lar, distributed processing, fault tolerance ve horizontal scaling için kritik öneme sahiptir. Bir consumer crash olsa bile, acknowledge edilmemiş message'lar otomatik olarak diğer consumer'lara redirect edilir.
Stream'in bir diğer devrimsel özelliği ise time-based range queries'dir. XRANGE ve XREVRANGE komutları ile belirli zaman aralıklarındaki message'ları millisecond precision ile çekebilirsiniz. Bu özellik, time-series analytics, historical data analysis ve event replay senaryoları için muazzam avantaj sağlar. Örneğin, "son 1 saatteki tüm error eventleri" veya "belirli user'ın bugünkü tüm aktiviteleri" gibi sorguları nanosecond seviyesinde hızla çözebilirsiniz.
🧩 1. Stream Veri Türü Temelleri
Redis'teki Stream, time-ordered, append-only log yapısıdır. Her entry (message) bir unique ID ve field-value çiftlerinden oluşur. Message ID'ler otomatik olarak timestamp-sequence formatında generate edilir ve chronological ordering garanti edilir. Stream'ler immutable'dır, yani eklenen message'lar sonradan değiştirilemez.
🔧 Temel Özellikler
Append-only: Sadece ekleme yapılabilir, modification mümkün değil
Unique IDs: Her message benzersiz timestamp-sequence ID alır
Time-ordered: Message'lar kronolojik sırada tutulur
Persistent: Message'lar disk'te kalıcı olarak saklanır
Field-value structure: Her message birden fazla field içerebilir
🔧 Temel Stream Komutları ve Açıklamaları
Komut
Açıklama
Örnek
XADD
Stream'e yeni message ekler
XADD events * type "login"
XREAD
Stream'den message'ları okur
XREAD STREAMS events 0
XRANGE
Belirli ID range'indeki message'ları getirir
XRANGE events - +
XREVRANGE
Reverse chronological order'da message'lar
XREVRANGE events + - COUNT 10
XLEN
Stream'deki message sayısını verir
XLEN events
XGROUP
Consumer group'ları yönetir
XGROUP CREATE events group1 $
XREADGROUP
Consumer group ile message okur
XREADGROUP GROUP group1 c1
XACK
Message'ı acknowledge eder
XACK events group1 msg-id
XPENDING
Acknowledge bekleyen message'ları listeler
XPENDING events group1
XTRIM
Stream'i belirli boyuta kırpar
XTRIM events MAXLEN 1000
XINFO
Stream hakkında bilgi verir
XINFO STREAM events
XDEL
Message'ları siler
XDEL events message-id
🧪 XADD Komutunu İnceleyelim
Stream'e yeni message eklemek için kullanılır.
text
127.0.0.1:6379> XADD events * event_type "user_login" user_id "123" timestamp "2024-01-20T10:30:00Z" // Events stream'ine login eventi ekliyoruz.
"1642678200000-0" // Otomatik generate edilen unique message ID.
127.0.0.1:6379> XADD events * event_type "page_view" user_id "456" page "/homepage" // Page view eventi ekliyoruz.
"1642678201000-0" // Yeni message ID (timestamp arttı).
127.0.0.1:6379> XADD events 1642678202000-0 event_type "purchase" user_id "123" amount "99.99" // Manuel ID ile message ekliyoruz.
"1642678202000-0" // Belirtilen ID kullanıldı.
127.0.0.1:6379> XADD metrics * cpu_usage "75.5" memory_usage "60.2" disk_usage "45.8" // Metrics stream'ine sistem bilgileri.
"1642678203000-0" // Metrics için yeni message ID.
127.0.0.1:6379> XADD chat:room1 * user "alice" message "Hello everyone!" timestamp "2024-01-20T10:35:00Z" // Chat message'ı.
"1642678500000-0" // Chat stream'inde message ID.
📌 Dikkat Edilmesi Gereken Noktalar
Otomatik ID generation* kullandığınızda Redis otomatik olarak current timestamp ile unique ID generate eder.
Manuel ID specification
text
127.0.0.1:6379>
127.0.0.1:6379> XADD events 1000000000000-0 type "test" // Manuel olarak ID belirtiyoruz.
127.0.0.1:6379>
ID format: timestamp-sequence
Format: millisecond_timestamp-sequence_number
Field-value çiftleri
Her message birden fazla field-value çifti içerebilir:
Consumer group creation$ ile group'u stream'in en sonundan başlatıyoruz (sadece yeni message'ları okur).
Multiple workers
Aynı group'taki farklı consumer'lar farklı message'ları alır (load balancing).
Message acknowledgmentXACK ile message'ın işlendiğini belirtmek zorundasınız.
Pending messages
Acknowledge edilmemiş message'lar XPENDING ile takip edilir.
Consumer failure handling
text
127.0.0.1:6379>
127.0.0.1:6379> XCLAIM events processors worker1 300000 1642678301000-0 // 5 dakika sonra message'ı başka worker'a transfer et.
127.0.0.1:6379>
🧪 XLEN ve XTRIM Komutlarını İnceleyelim
Stream bilgileri ve memory management için kullanılır.
Redis Stream veri türü, event-driven architectures ve real-time data processing konusunda Redis'in en gelişmiş ve güçlü araçlarından biridir. Append-only log yapısı, consumer groups ve time-based queries ile modern application patterns'larını native olarak destekler.
Bu bölümde XADD, XREAD, XRANGE, XGROUP, XREADGROUP gibi temel komutları ve gerçek dünya senaryolarında Stream kullanımını detaylı örneklerle öğrendik.
Stream'in append-only structure, consumer groups, time-based queries ve message acknowledgment özellikleri özellikle:
Event sourcing ve CQRS patterns
Message queues ve async processing
Real-time analytics ve monitoring
IoT data collection ve processing
Chat applications ve real-time communication
Financial transaction logging
Audit trails ve compliance
gibi senaryolarda vazgeçilmez bir araçtır.
Stream veri türü, event-driven applications ihtiyaçlarınız için Redis'te en comprehensive çözümü sunar. Time-ordered persistence, distributed processing ve real-time capabilities üçlüsü, modern applications'ların complex event handling requirements'larını karşılamak için mükemmel bir kombinasyon oluşturur.
Bu bölümde öğrendiğiniz komutlar ve senaryolar ile artık:
Event sourcing ve CQRS pattern implementasyonları geliştirebilir
Message queue sistemleri ve async processing pipelines tasarlayabilir
Real-time data streaming applications oluşturabilir
IoT data collection ve sensor monitoring sistemleri geliştirebilir
Audit trail ve transaction logging mekanizmaları implementasyonları yapabilirsiniz
Stream'leri projelerinizde etkin kullanarak, kullanıcılarınıza event-driven, real-time ve highly-scalable deneyimler sunabilirsiniz.
Sırada ne var? Bir sonraki yazımızda Redis'in Geo veri türünü derinlemesine inceleyeceğiz. Geo, geospatial indexing ve location-based queries için tasarlanmış specialized bir veri türüdür. GPS coordinates'leri nasıl verimli şekilde saklayabileceğimizi, proximity searches nasıl yapabileceğimizi, radius-based queries ile location services nasıl geliştirebileceğimizi ve geospatial applications'ın mobile era'daki kritik önemini öğreneceğiz.
Konuya başlamadan önce çok fazla özel isim kullandığımı fark ettim.
Bu konuda elimden geldiğince sizlere tek tek bu kavramları öncelikle açıklamak istiyorum.
📝 Ek Bilgi: Önemli Kavramlar
📚 Temel Yapı Kavramları📝 Append-only Log
Append-only = Sadece ekleme yapılabilir, silme/değiştirme olmaz
Log = Kronolojik sırayla tutulan kayıt defteri
Örnek: Banka hesap hareketleri gibi → Her işlem eklenir, değiştirilmez
Avantaj: Veri bütünlüğü ve audit trail garantisi
🔗 Chronological Ordering
Chronological = Zaman sırasına göre dizilmiş
Ordering = Sıralama sistemi
Redis'te her mesaj zaman damgası alır ve kronolojik sırada tutulur
Böylece "10:30'daki mesajlar" veya "bugünkü tüm olaylar" sorgulanabilir
🆔 Unique Message IDs
Her mesaj benzersiz ID alır: 1642678200000-0 formatında
İlk kısım: Timestamp (Unix millisecond)
İkinci kısım: Sequence number (aynı millisecond'deki sıra)