-
🎯 Redis Sorted Set Kullanım Senaryoları
| Kullanım Alanı | Açıklama | Redis Komutu Örneği |
|---|
| Leaderboard/Sıralama | Oyun skorları, yarışma sıralamaları | ZADD leaderboard 1500 "player1" |
| Zaman serisi verileri | Timestamp bazlı olaylar | ZADD Fatihnts 1640995200 "Fatihnt1" |
| Priority Queue | Öncelik bazlı görev kuyruğu | ZADD tasks 1 "urgent_task" |
| Top N listeleri | En popüler ürünler, trend konular | ZREVRANGE popular_posts 0 9 |
| Rate limiting | Zaman bazlı istek sınırlama | ZADD rate_limit:user1 timestamp "request" |
| Real-time analytics | Anlık istatistikler ve metrikler | ZINCRBY page_views 1 "/home" |
| Geolocation (yakınlık) | Mesafe bazlı location sıralama | ZADD locations 42.123 "store1" |
| Weighted scoring sistemleri | Ağırlıklı puanlama, çok kriterlî sıralama | ZADD recommendations 0.95 "product1" |
| Session/Activity tracking | Kullanıcı aktivitelerinin zaman bazlı takibi | ZADD user:123:sessions timestamp "session" |
| Price monitoring | Fiyat bazlı ürün sıralama | ZADD products:by_price 299.99 "laptop" |
- Sorted Set'in en büyük gücü, logaritmik zaman karmaşıklığında (O(log N)) çalışan işlemlerinde yatar. Eleman ekleme, silme, score güncelleme ve rank sorgulama işlemleri çok hızlıdır. Milyonlarca kayıt içeren Sorted Set'lerde bile eleman arama, range sorguları ve sıralama işlemleri milisaniyeler içinde tamamlanır. Bu performans, real-time systems, high-frequency trading ve big data analytics uygulamalarında kritik önem taşır.
- Sorted Set'in bir diğer önemli özelliği ise çoklu sıralama kriterlerini desteklemesidir.
ZUNION ve ZINTER komutları ile farklı kriterlerde sıralanmış set'leri birleştirerek, composite scoring sistemleri oluşturabilirsiniz. Örneğin, bir e-ticaret sitesinde ürünleri hem popülerliğe hem de fiyata göre sıralayan recommendation engine geliştirebilirsiniz.
-
🏆 1. Sorted Set Veri Türü Temelleri
- Redis'teki
Sorted Set, benzersiz string elemanlarının her birinin floating-point score değeri ile birlikte saklandığı, otomatik sıralanan bir koleksiyondur. Elemanlar score değerine göre küçükten büyüğe sıralanır ve score'lar eşitse leksikografik (alfabetik) sıralama uygulanır.
-
🔧 Temel Özellikler
- Score bazlı sıralama: Elemanlar score değerine göre otomatik sıralanır
- Benzersizlik: Aynı eleman sadece bir kez bulunabilir (score güncellenebilir)
- Logaritmik performans: Çoğu işlem O(log N) zaman karmaşıklığında
- Maksimum eleman sayısı: 2^32 - 1 (yaklaşık 4 milyar eleman)
- Score aralığı: IEEE 754 floating point (-inf to +inf)
-
🔧 Temel Sorted Set Komutları ve Açıklamaları
| Komut | Açıklama | Örnek |
|---|
ZADD | Score ile birlikte eleman ekler | ZADD scores 100 "user1" |
ZRANGE | Belirli rank aralığındaki elemanları getirir | ZRANGE scores 0 9 |
ZREVRANGE | Ters sıralama ile rank aralığı getirir | ZREVRANGE scores 0 9 |
-
🧪 ZADD Komutunu İnceleyelim
Sorted Set'e score değeri ile birlikte eleman eklemek için kullanılır. Eleman zaten varsa score'u güncellenir.
127.0.0.1:6379> ZADD leaderboard 1500 "Kubilay" // "leaderboard" sorted set'ine Kubilay'i 1500 score ile ekliyoruz.
(integer) 1 // 1 yeni eleman eklendi.
127.0.0.1:6379> ZADD leaderboard 1200 "Samet" // Samet'u 1200 score ile ekliyoruz.
(integer) 1 // 1 yeni eleman eklendi.
127.0.0.1:6379> ZADD leaderboard 1800 "Burak" // Burak'yi 1800 score ile ekliyoruz.
(integer) 1 // 1 yeni eleman eklendi.
127.0.0.1:6379> ZADD leaderboard 1600 "Kubilay" // Kubilay'in score'unu 1600'e günceliyoruz.
(integer) 0 // Mevcut eleman güncellendi, yeni eleman eklenmedi.
127.0.0.1:6379> ZADD leaderboard 1100 "Çağrı" 1750 "Fatih" // Aynı anda iki eleman ekliyoruz.
(integer) 2 // 2 yeni eleman eklendi.
-
📌 Dikkat Edilmesi Gereken Noktalar
- ZADD eklenen yeni eleman sayısını döndürür
Eğer eleman zaten varsa ve sadece score güncellenmişse, sayaç artmaz:
127.0.0.1:6379> ZADD test 100 "a" 200 "b" 150 "a" // "a" elemanı iki kez veriliyor.
(integer) 2 // Sadece 2 benzersiz eleman eklendi.
127.0.0.1:6379>
- Score değerleri floating-point olabilir
127.0.0.1:6379> ZADD prices 19.99 "book" 299.50 "laptop" // Ondalıklı değerler kullanılabilir.
(integer) 2
127.0.0.1:6379>
- Negatif score değerleri kullanılabilir
127.0.0.1:6379> ZADD temperatures -5.5 "istanbul" 15.2 "antalya" // Negatif değerler geçerlidir.
(integer) 2
127.0.0.1:6379>
- ZADD seçenekleri kullanılabilir
127.0.0.1:6379> ZADD leaderboard XX 2000 "Kubilay" // XX: Sadece mevcut elemanları güncelle.
(integer) 0 // Kubilay mevcuttu, score güncellendi.
127.0.0.1:6379> ZADD leaderboard NX 1000 "Feridun" // NX: Sadece yeni elemanları ekle.
(integer) 1 // Feridun yeni eleman olarak eklendi.
-
🧪 ZRANGE Komutunu İnceleyelim
Sorted Set'teki elemanları rank (sıra) numarasına göre getirir. 0'dan başlayarak sıralama yapar.
1) "Çağrı" // En düşük score (1100).
2) "Samet" // 1200 score.
3) "Kubilay" // 1600 score.
4) "Fatih" // 1750 score.
5) "Burak" // En yüksek score (1800).
127.0.0.1:6379> ZRANGE leaderboard 0 2 // İlk 3 elemanı getir.
1) "Çağrı" // Rank 0.
2) "Samet" // Rank 1.
3) "Kubilay" // Rank 2.
127.0.0.1:6379> ZRANGE leaderboard 0 2 WITHSCORES // Score değerleri ile birlikte getir.
1) "Çağrı" // Eleman adı.
2) "1100" // Score değeri.
3) "Samet" // Eleman adı.
4) "1200" // Score değeri.
5) "Kubilay" // Eleman adı.
6) "1600" // Score değeri.
-
📌 Dikkat Edilmesi Gereken Noktalar
- İndeksler 0'dan başlar
ZRANGE key 0 0 → ilk eleman (en düşük score)
ZRANGE key -1 -1 → son eleman (en yüksek score)
- WITHSCORES seçeneği çok kullanışlıdır
Score değerlerini de görmek için
WITHSCORES ekleyin.
- Negatif indeksler sondan saymak için kullanılır
127.0.0.1:6379> ZRANGE leaderboard -2 -1 // Son 2 elemanı getir.
1) "Fatih" // Sondan 2. eleman.
2) "Burak" // En son eleman (en yüksek score).
127.0.0.1:6379>
- Büyük sorted set'lerde dikkatli olun
ZRANGE key 0 -1 tüm elemanları getirir, çok büyük set'lerde performans sorunu yaratabilir.
-
🧪 ZREVRANGE Komutunu İnceleyelim
ZRANGE'in tam tersi, elemanları yüksek score'dan düşük score'a doğru sıralar.
127.0.0.1:6379> ZREVRANGE leaderboard 0 -1 // Tüm elemanları yüksek score'dan düşük score'a sırala.
1) "Burak" // En yüksek score (1800).
2) "Fatih" // 1750 score.
3) "Kubilay" // 1600 score.
4) "Samet" // 1200 score.
5) "Çağrı" // En düşük score (1100).
127.0.0.1:6379> ZREVRANGE leaderboard 0 2 WITHSCORES // Top 3 oyuncuyu score'ları ile getir.
1) "Burak" // 1. sıra.
2) "1800" // Burak'nin score'u.
3) "Fatih" // 2. sıra.
4) "1750" // Fatih'nin score'u.
5) "Kubilay" // 3. sıra.
6) "1600" // Kubilay'in score'u.
-
📌 Dikkat Edilmesi Gereken Noktalar
- Leaderboard uygulamaları için idealdir
En yüksek skorları görmek için
ZREVRANGE kullanın.
- ZRANGE ile aynı parametreleri alır
WITHSCORES, negatif indeksler vb. aynı şekilde çalışır.
- Top N listelerini almak için sıkça kullanılır
127.0.0.1:6379>
127.0.0.1:6379> ZREVRANGE leaderboard 0 9 // Top 10 oyuncuyu getir.
127.0.0.1:6379>
-
🧪 ZRANGEBYSCORE Komutunu İnceleyelim
Belirli score aralığındaki elemanları getirir. Range sorguları için çok kullanışlıdır.
127.0.0.1:6379> ZADD prices 15.50 "book" 25.99 "headphones" 299.99 "laptop" 599.00 "smartphone" // Ürün fiyatları ekliyoruz.
(integer) 4
127.0.0.1:6379> ZRANGEBYSCORE prices 20 300 // 20-300 arası fiyatlı ürünleri getir.
1) "headphones" // 25.99 fiyatlı.
2) "laptop" // 299.99 fiyatlı.
127.0.0.1:6379> ZRANGEBYSCORE prices 20 300 WITHSCORES // Fiyatlarla birlikte getir.
1) "headphones"
2) "25.99"
3) "laptop"
4) "299.99"
127.0.0.1:6379> ZRANGEBYSCORE prices (25 (300 // 25'ten büyük, 300'den küçük (exclusive).
1) "headphones" // 25.99 > 25 ve 299.99 < 300.
2) "laptop"
127.0.0.1:6379> ZRANGEBYSCORE prices -inf +inf // Tüm elemanları score sırasına göre getir.
1) "book" // En düşük fiyat.
2) "headphones"
3) "laptop"
4) "smartphone" // En yüksek fiyat.
-
📌 Dikkat Edilmesi Gereken Noktalar
- Aralık belirtme seçenekleri
[min max]: Dahil (inclusive)
(min max): Hariç (exclusive)
-inf +inf: Sonsuzluk değerleri
- LIMIT seçeneği kullanılabilir
127.0.0.1:6379> ZRANGEBYSCORE prices 0 1000 LIMIT 0 2 // İlk 2 sonucu getir.
1) "book"
2) "headphones"
- ZREVRANGEBYSCORE komutu da mevcuttur
127.0.0.1:6379> ZREVRANGEBYSCORE prices 1000 0 // Ters sıralama ile aralık.
1) "smartphone"
2) "laptop"
3) "headphones"
4) "book"
-
🧪 ZSCORE ve ZRANK Komutlarını İnceleyelim
ZSCORE elemanın score değerini, ZRANK ise elemanın sıralamadaki pozisyonunu verir.
"1600" // Kubilay'in score değeri.
127.0.0.1:6379> ZSCORE leaderboard "unknown" // Var olmayan eleman sorgulanıyor.
(nil) // Eleman bulunamadı.
127.0.0.1:6379> ZRANK leaderboard "Kubilay" // Kubilay'in rank'ını öğren (0'dan başlar).
(integer) 2 // Kubilay 3. sırada (0,1,2).
127.0.0.1:6379> ZREVRANK leaderboard "Kubilay" // Kubilay'in ters sıralamadaki rank'ını öğren.
(integer) 2 // Ters sıralamada da 3. sırada.
127.0.0.1:6379> ZRANK leaderboard "Burak" // En yüksek skorlu Burak'nin rank'ı.
(integer) 4 // Normal sıralamada 5. sırada (son).
127.0.0.1:6379> ZREVRANK leaderboard "Burak" // Burak'nin ters sıralamadaki rank'ı.
(integer) 0 // Ters sıralamada 1. sırada (birinci).
-
📌 Dikkat Edilmesi Gereken Noktalar
- ZRANK sonuçları 0'dan başlar
En düşük score'a sahip eleman rank 0'dır.
- ZREVRANK yüksek score'dan düşük score'a sıralar
En yüksek score'a sahip eleman ZREVRANK'ta 0. sıradadır.
- Performans çok yüksektir
Her iki komut da O(log N) zamanda çalışır.
-
🧪 ZCARD ve ZCOUNT Komutlarını İnceleyelim
ZCARD toplam eleman sayısını, ZCOUNT belirli score aralığındaki eleman sayısını verir.
127.0.0.1:6379> ZCARD leaderboard // leaderboard'da kaç eleman var?
(integer) 5 // 5 eleman bulunuyor.
127.0.0.1:6379> ZCOUNT leaderboard 1000 1500 // 1000-1500 score aralığında kaç eleman var?
(integer) 2 // 2 eleman (Çağrı:1100, Samet:1200).
127.0.0.1:6379> ZCOUNT leaderboard -inf +inf // Tüm elemanların sayısı.
(integer) 5 // ZCARD ile aynı sonuç.
127.0.0.1:6379> ZCOUNT leaderboard (1500 +inf // 1500'den büyük score'a sahip elemanlar.
(integer) 3 // 3 eleman (Kubilay:1600, Fatih:1750, Burak:1800).
-
📌 Dikkat Edilmesi Gereken Noktalar
- ZCARD her zaman O(1) performansında çalışır
Set boyutu ne olursa olsun, anında sonuç verir.
- ZCOUNT O(log N) performansında çalışır
Score aralığı sorguları logaritmik zamanda tamamlanır.
- Analytics uygulamaları için çok yararlıdır
Belirli aralıklardaki veri sayılarını hızlıca öğrenebilirsiniz.
-
🧪 ZINCRBY Komutunu İnceleyelim
Mevcut elemanın score değerini artırır veya azaltır. Eleman yoksa belirtilen score ile oluşturur.
127.0.0.1:6379> ZSCORE leaderboard "Kubilay" // Kubilay'in mevcut score'u.
"1600"
127.0.0.1:6379> ZINCRBY leaderboard 100 "Kubilay" // Kubilay'in score'unu 100 artır.
"1700" // Yeni score değeri döndürülüyor.
127.0.0.1:6379> ZINCRBY leaderboard -50 "Kubilay" // Kubilay'in score'unu 50 azalt.
"1650" // Score azaltıldı.
127.0.0.1:6379> ZINCRBY leaderboard 500 "Feridun" // Var olmayan Feridun'i 500 score ile ekle.
"500" // Feridun yeni eleman olarak eklendi.
127.0.0.1:6379> ZRANGE leaderboard 0 -1 WITHSCORES // Güncel sıralamayı kontrol et.
1) "Feridun" // 500 score.
2) "Çağrı" // 1100 score.
3) "Samet" // 1200 score.
4) "Kubilay" // 1650 score (güncellendi).
5) "Fatih" // 1750 score.
6) "Burak" // 1800 score.
-
📌 Dikkat Edilmesi Gereken Noktalar
- Atomik işlemdir
Score artırma/azaltma işlemi tek seferde tamamlanır, yarım kalan durum olmaz.
- Negatif değerler ile azaltma yapılabilir
127.0.0.1:6379>
127.0.0.1:6379> ZINCRBY scores -25 "user1" // 25 puan azalt.
127.0.0.1:6379>
- Real-time sistemler için idealdir
Canlı skorboard'lar, view count'lar, rating sistemleri için mükemmeldir.
- Floating-point değerler desteklenir
127.0.0.1:6379>
127.0.0.1:6379> ZINCRBY ratings 0.1 "product1" // Rating'i 0.1 artır.
127.0.0.1:6379>
-
🧪 ZREM Komutunu İnceleyelim
Sorted Set'ten bir veya birden fazla elemanı siler.
127.0.0.1:6379> ZRANGE leaderboard 0 -1 // Mevcut elemanları göster.
1) "Feridun"
2) "Çağrı"
3) "Samet"
4) "Kubilay"
5) "Fatih"
6) "Burak"
127.0.0.1:6379> ZREM leaderboard "Feridun" // Feridun'i sil.
(integer) 1 // 1 eleman silindi.
127.0.0.1:6379> ZREM leaderboard "Kubilay" "Samet" // Kubilay ve Samet'u aynı anda sil.
(integer) 2 // 2 eleman silindi.
127.0.0.1:6379> ZREM leaderboard "unknown" // Var olmayan elemanı silmeye çalış.
(integer) 0 // Silinecek eleman yok.
127.0.0.1:6379> ZRANGE leaderboard 0 -1 // Güncel durumu kontrol et.
1) "Çağrı" // Kalan elemanlar.
2) "Fatih"
3) "Burak"
-
📌 Dikkat Edilmesi Gereken Noktalar
- Silinen eleman sayısı döndürülür
Gerçekte silinen eleman sayısını verir.
- Birden fazla eleman aynı anda silinebilir
127.0.0.1:6379>
127.0.0.1:6379> ZREM leaderboard "user1" "user2" "user3" // Toplu silme.
127.0.0.1:6379>
- Score aralığına göre silme için ZREMRANGEBYSCORE kullanın
127.0.0.1:6379>
127.0.0.1:6379> ZREMRANGEBYSCORE leaderboard 0 100 // 0-100 score aralığındaki elemanları sil.
127.0.0.1:6379>
- Rank aralığına göre silme için ZREMRANGEBYRANK kullanın
127.0.0.1:6379>
127.0.0.1:6379> ZREMRANGEBYRANK leaderboard 0 2 // İlk 3 elemanı sil.
127.0.0.1:6379>
-
🧪 Küme İşlemleri - ZUNION Komutunu İnceleyelim
İki veya daha fazla sorted set'in birleşimini alır. Score'lar toplanır.
127.0.0.1:6379> ZADD skills:programming 80 "Kubilay" 90 "Samet" 70 "Burak" // Programming skorları.
(integer) 3
127.0.0.1:6379> ZADD skills:design 85 "Kubilay" 75 "Samet" 95 "Çağrı" // Design skorları.
(integer) 3
127.0.0.1:6379> ZUNION skills:total 2 skills:programming skills:design // İki beceriyi birleştir.
1) "Burak" // Sadece programming'de var (70).
2) "Samet" // 90 + 75 = 165.
3) "Kubilay" // 80 + 85 = 165.
4) "Çağrı" // Sadece design'da var (95).
127.0.0.1:6379> ZUNION skills:total 2 skills:programming skills:design WITHSCORES // Score'larla birlikte.
1) "Burak"
2) "70"
3) "Samet"
4) "165"
5) "Kubilay"
6) "165"
7) "Çağrı"
8) "95"
-
📌 Dikkat Edilmesi Gereken Noktalar
- Score'lar varsayılan olarak toplanır
Aynı eleman birden fazla set'te varsa, score'ları toplanır.
- Sonucu yeni bir sorted set'e kaydetmek için ZUNIONSTORE kullanın
127.0.0.1:6379> ZUNIONSTORE total_skills 2 skills:programming skills:design
(integer) 4 // 4 eleman birleşim set'ine kaydedildi.
127.0.0.1:6379>
- Toplama stratejisi değiştirilebilir
127.0.0.1:6379> ZUNION skills:max 2 skills:programming skills:design AGGREGATE MAX // En yüksek score'u al.
127.0.0.1:6379> ZUNION skills:min 2 skills:programming skills:design AGGREGATE MIN // En düşük score'u al.
127.0.0.1:6379>
- Sonucu yeni bir sorted set'e kaydetmek için ZUNIONSTORE kullanın
127.0.0.1:6379> ZUNIONSTORE total_skills 2 skills:programming skills:design
(integer) 4 // 4 eleman birleşim set'ine kaydedildi.
127.0.0.1:6379>
-
🧪 Küme İşlemleri - ZINTER Komutunu İnceleyelim
İki veya daha fazla sorted set'in kesişimini alır. Sadece her iki set'te de bulunan elemanlar döner.
127.0.0.1:6379> ZADD team:frontend 85 "Kubilay" 90 "Samet" 80 "Burak" // Frontend team skorları.
(integer) 3
127.0.0.1:6379> ZADD team:backend 90 "Kubilay" 95 "Çağrı" 88 "Fatih" // Backend team skorları.
(integer) 3
127.0.0.1:6379> ZINTER fullstack:candidates 2 team:frontend team:backend // Her iki takımda da bulunanlar.
1) "Kubilay" // Sadece Kubilay her iki takımda da var.
127.0.0.1:6379> ZINTER fullstack:candidates 2 team:frontend team:backend WITHSCORES // Score'ları ile.
1) "Kubilay"
2) "175" // 85 + 90 = 175 (toplanmış score).
-
📌 Dikkat Edilmesi Gereken Noktalar
- Sadece ortak elemanlar döner
Kesişim işlemi, her iki set'te de bulunan elemanları getirir.
- Score işlemleri ZUNION ile aynıdır
WEIGHTS, AGGREGATE seçenekleri aynı şekilde kullanılabilir.
- Boş kesişim durumunda boş sonuç döner
127.0.0.1:6379> ZADD set1 100 "a" 200 "b"
127.0.0.1:6379> ZADD set2 300 "c" 400 "d"
127.0.0.1:6379> ZINTER result 2 set1 set2 // Ortak eleman yok.
(empty array) // Boş sonuç.
-
🔄 Sorted Set ile Gerçek Dünya Senaryoları
-
🏆 Senaryo 1: Gaming Leaderboard Sistemi
127.0.0.1:6379> ZADD game:leaderboard 15420 "player1" 18200 "player2" 12300 "player3" // Oyuncu skorları.
(integer) 3
127.0.0.1:6379> ZINCRBY game:leaderboard 500 "player1" // player1 yeni puan kazandı.
"15920"
127.0.0.1:6379> ZREVRANGE game:leaderboard 0 9 WITHSCORES // Top 10 leaderboard.
1) "player2" // 1. sıra.
2) "18200"
3) "player1" // 2. sıra.
4) "15920"
5) "player3" // 3. sıra.
6) "12300"
127.0.0.1:6379> ZRANK game:leaderboard "player1" // player1'in sırası.
(integer) 1 // 2. sırada (0'dan başlayarak).
127.0.0.1:6379> ZREVRANK game:leaderboard "player1" // Yüksekten aşağıya sıralama.
(integer) 1 // 2. sırada.
-
📈 Senaryo 2: Real-time Analytics ve Trending
127.0.0.1:6379> ZADD trending:topics 150 "redis" 200 "kubernetes" 180 "docker" // Trend konular.
(integer) 3
127.0.0.1:6379> ZINCRBY trending:topics 50 "redis" // Redis konusu daha popüler oldu.
"200"
127.0.0.1:6379> ZREVRANGE trending:topics 0 4 // En trend 5 konu.
1) "redis" // Tie - 200 puan.
2) "kubernetes" // Tie - 200 puan.
3) "docker" // 180 puan.
127.0.0.1:6379> ZCOUNT trending:topics 100 300 // 100-300 arası popülerlikte kaç konu?
(integer) 3 // 3 konu bu aralıkta.
-
🛒 Senaryo 3: E-ticaret Ürün Sıralaması
127.0.0.1:6379> ZADD products:by_rating 4.8 "laptop1" 4.5 "laptop2" 4.9 "laptop3" // Rating'e göre sıralama.
(integer) 3
127.0.0.1:6379> ZADD products:by_price 1299 "laptop1" 899 "laptop2" 1599 "laptop3" // Fiyata göre sıralama.
(integer) 3
127.0.0.1:6379> ZUNION products:combined 2 products:by_rating products:by_price WEIGHTS 100 -1 // Composite scoring.
127.0.0.1:6379> ZREVRANGE products:combined 0 -1 WITHSCORES // En iyi değer/performans oranı.
1) "laptop2" // En iyi değer (en az negatif score).
2) "-449"
3) "laptop1"
4) "-819"
5) "laptop3"
6) "-1109"
-
⏰ Senaryo 4: Zaman Bazlı Fatihnt Tracking
127.0.0.1:6379> ZADD user:123:sessions 1640995200 "session1" 1640998800 "session2" // Timestamp bazlı session takibi.
(integer) 2
127.0.0.1:6379> ZADD user:123:sessions 1641002400 "session3" // Yeni session eklendi.
(integer) 1
127.0.0.1:6379> ZRANGEBYSCORE user:123:sessions 1640995200 1641000000 // Belirli zaman aralığındaki sessionlar.
1) "session1" // Bu zaman aralığında.
2) "session2" // Bu zaman aralığında.
127.0.0.1:6379> ZREMRANGEBYSCORE user:123:sessions 0 1640995000 // Eski sessionları temizle.
(integer) 0 // Bu örnekte silinecek eski session yok.
127.0.0.1:6379> ZCARD user:123:sessions // Toplam session sayısı.
(integer) 3
-
🚀 Sorted Set Performans İpuçları ve Best Practices
-
⚡ Performans Optimizasyonları
- Range sorguları için LIMIT kullanın
127.0.0.1:6379>
127.0.0.1:6379> ZRANGEBYSCORE big_set 0 1000 LIMIT 0 100 // İlk 100 sonucu al.
127.0.0.1:6379>
- Çok büyük sorted set'lerde ZRANGE yerine ZSCAN kullanın
127.0.0.1:6379>
127.0.0.1:6379> ZSCAN big_sorted_set 0 MATCH "user*" COUNT 100 // Sayfalı okuma.
127.0.0.1:6379>
- Temporary sorted set'ler için TTL belirleyin
127.0.0.1:6379>
127.0.0.1:6379> EXPIRE temp:results 3600 // 1 saat sonra silinsin.
127.0.0.1:6379>
- Score güncellemeleri için ZINCRBY tercih edin
127.0.0.1:6379>
127.0.0.1:6379> ZINCRBY scores 10 "user1" // ZADD yerine ZINCRBY kullan.
127.0.0.1:6379>
-
💡 İyi Pratikler
- Namespace'ler kullanın:
game:leaderboard, products:by_price
- Score değerlerini normalize edin: 0-100 arası gibi standart aralıklar kullanın
- Composite scoring için ZUNION/ZINTER ile weighted scoring yapın
- Zaman bazlı veriler için Unix timestamp'leri score olarak kullanın
- Memory optimization için küçük sorted set'leri tercih edin (mümkünse <1000 eleman)
- Regular cleanup işlemleri için
ZREMRANGEBYSCORE kullanın
-
🔧 Monitoring ve Debugging
-
- 127.0.0.1:6379> MEMORY USAGE leaderboard // Sorted set'in memory kullanımı.
- 127.0.0.1:6379> ZCARD leaderboard // Eleman sayısını takip et.
- 127.0.0.1:6379> INFO memory // Genel memory bilgisi.
-
📝 Özet
Redis Sorted Set veri türü, score bazlı otomatik sıralama özelliği ile Redis'in en güçlü ve esnek veri yapılarından biridir. Set'in benzersizlik garantisi ile birleşen logaritmik performansı, real-time uygulamalar için ideal bir çözüm sunar.
Bu bölümde ZADD, ZRANGE, ZREVRANGE, ZRANGEBYSCORE gibi temel komutları; ZSCORE, ZRANK, ZINCRBY gibi sorgulama/güncelleme komutlarını; ve ZUNION, ZINTER gibi küme işlemlerini detaylı örneklerle öğrendik.
Sorted Set'in score bazlı sıralama, range sorguları, rank hesaplamaları ve logaritmik performans özellikleri özellikle:
- Gaming leaderboard'ları
- Real-time analytics
- Priority queue sistemleri
- Zaman serisi verileri
- E-ticaret product ranking
- Sorted Set veri türü, Redis'in sunduğu en sofistike ve güçlü veri yapılarından biridir. Otomatik sıralama, benzersizlik garantisi ve logaritmik performans üçlüsü, modern uygulamaların karmaşık ihtiyaçlarını karşılamak için mükemmel bir kombinasyon oluşturur.
Bu bölümde öğrendiğiniz komutlar ve senaryolar ile artık:
- Gerçek zamanlı leaderboard'lar oluşturabilir
- Trending sistemleri geliştirebilir
- Priority queue'lar tasarlayabilir
- Zaman bazlı analytics yapabilir
- Composite scoring algoritmaları uygulayabilirsiniz
Sorted Set'i projelerinizde etkin kullanarak, kullanıcılarınıza hızlı, güvenilir ve scalable deneyimler sunabilirsiniz.
Sırada ne var? Bir sonraki yazımızda Redis'in Hash veri türünü derinlemesine inceleyeceğiz. Hash'ler, object-like verileri field-value çiftleri halinde saklayabilen, JSON benzeri yapıları Redis'te modellemek için ideal olan veri türüdür. User profilleri, product detayları, configuration ayarları gibi structured dataları nasıl verimli şekilde yöneteceğimizi öğreneceğiz.
- Şimdilik Hoşçakalın.