Not içeriği yükleniyor...
// Markdown dosyası okunuyor
// İçerik işleniyor
// Syntax highlighting hazırlanıyor
// Markdown dosyası okunuyor
// İçerik işleniyor
// Syntax highlighting hazırlanıyor
Sorted Sets ile ranking systems, leaderboards ve time-series data. ZADD, ZRANGE komutları ile score-based sorting ve range queries.
Özellik | Açıklama | Örnek |
---|---|---|
Score bazlı sıralama | Elemanlar score değerine göre otomatik sıralanır | score: 100 → "user1", 200 → "user2" |
Benzersizlik | Aynı eleman birden fazla kez eklenemez | user1 sadece bir kez bulunabilir |
Range sorguları | Belirli score/rank aralığındaki elemanları getirme | ZRANGE leaderboard 0 9 (top 10) |
Score güncellemeleri | Elemanın score'u güncellenebilir | ZINCRBY scores 10 "user1" |
Rank hesaplaması | Elemanın sıralamadaki pozisyonunu bulma | ZRANK leaderboard "user1" |
Ters sıralama desteği | Büyükten küçüğe sıralama yapabilme | ZREVRANGE leaderboard 0 9 |
Score aralık sorguları | Belirli score değerleri arasındaki elemanları bulma | ZRANGEBYSCORE prices 100 500 |
Union/Intersection | Sorted Set'ler arası küme işlemleri | ZUNION result set1 set2 |
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" |
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.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.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 |
ZRANGEBYSCORE | Belirli score aralığındaki elemanları getirir | ZRANGEBYSCORE scores 50 100 |
ZREM | Elemanları siler | ZREM scores "user1" |
ZSCORE | Elemanın score değerini getirir | ZSCORE scores "user1" |
ZRANK | Elemanın rank (sıra) bilgisini verir | ZRANK scores "user1" |
ZREVRANK | Ters sıralamada elemanın rank bilgisini verir | ZREVRANK scores "user1" |
ZCARD | Sorted Set'teki eleman sayısını verir | ZCARD scores |
ZCOUNT | Belirli score aralığındaki eleman sayısını verir | ZCOUNT scores 50 100 |
ZINCRBY | Elemanın score değerini artırır/azaltır | ZINCRBY scores 10 "user1" |
ZUNION | İki veya daha fazla sorted set'in birleşimi | ZUNION result 2 set1 set2 |
ZINTER | İki veya daha fazla sorted set'in kesişimi | ZINTER result 2 set1 set2 |
text127.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.
text127.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>
text127.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>
text127.0.0.1:6379> ZADD temperatures -5.5 "istanbul" 15.2 "antalya" // Negatif değerler geçerlidir. (integer) 2 127.0.0.1:6379>
text127.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.
text127.0.0.1:6379> ZRANGE leaderboard 0 -1 // Tüm elemanları düşük score'dan yüksek score'a doğru sıralı getir. 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.
ZRANGE key 0 0
→ ilk eleman (en düşük score)
ZRANGE key -1 -1
→ son eleman (en yüksek score)WITHSCORES
ekleyin.text127.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>
ZRANGE key 0 -1
tüm elemanları getirir, çok büyük set'lerde performans sorunu yaratabilir.text127.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.
ZREVRANGE
kullanın.WITHSCORES
, negatif indeksler vb. aynı şekilde çalışır.text127.0.0.1:6379> 127.0.0.1:6379> ZREVRANGE leaderboard 0 9 // Top 10 oyuncuyu getir. 127.0.0.1:6379>
text127.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.
[min max]
: Dahil (inclusive)(min max)
: Hariç (exclusive)-inf +inf
: Sonsuzluk değerleritext127.0.0.1:6379> ZRANGEBYSCORE prices 0 1000 LIMIT 0 2 // İlk 2 sonucu getir. 1) "book" 2) "headphones"
text127.0.0.1:6379> ZREVRANGEBYSCORE prices 1000 0 // Ters sıralama ile aralık. 1) "smartphone" 2) "laptop" 3) "headphones" 4) "book"
ZSCORE
elemanın score değerini, ZRANK
ise elemanın sıralamadaki pozisyonunu verir.
text127.0.0.1:6379> ZSCORE leaderboard "Kubilay" // Kubilay'in score'unu öğren. "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).
ZCARD
toplam eleman sayısını, ZCOUNT
belirli score aralığındaki eleman sayısını verir.
text127.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).
text127.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.
text127.0.0.1:6379> 127.0.0.1:6379> ZINCRBY scores -25 "user1" // 25 puan azalt. 127.0.0.1:6379>
text127.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>
text127.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"
text127.0.0.1:6379> 127.0.0.1:6379> ZREM leaderboard "user1" "user2" "user3" // Toplu silme. 127.0.0.1:6379>
text127.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>
text127.0.0.1:6379> 127.0.0.1:6379> ZREMRANGEBYRANK leaderboard 0 2 // İlk 3 elemanı sil. 127.0.0.1:6379>
text127.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"
text127.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>
text127.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>
text127.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>
text127.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).
text127.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ç.
text127.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.
text127.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.
markdown127.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. 1) "laptop3" // 4.9*100 + 1599*(-1) = 490 - 1599 = -1109. 2) "laptop1" // 4.8*100 + 1299*(-1) = 480 - 1299 = -819. 3) "laptop2" // 4.5*100 + 899*(-1) = 450 - 899 = -449. 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"
text127.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
text127.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>
text127.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>
text127.0.0.1:6379> 127.0.0.1:6379> EXPIRE temp:results 3600 // 1 saat sonra silinsin. 127.0.0.1:6379>
text127.0.0.1:6379> 127.0.0.1:6379> ZINCRBY scores 10 "user1" // ZADD yerine ZINCRBY kullan. 127.0.0.1:6379>
game:leaderboard
, products:by_price
ZREMRANGEBYSCORE
kullanınmarkdown- 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.
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: