Örnek sorular
Redis Data StructuresZorluk 1
Sayfa görüntülenme sayısı gibi basit bir sayaç saklamak için hangi Redis veri tipi en uygundur?
Açıklama:Redis string'ler integer değer tutabilir ve atomik INCR/INCRBY operasyonlarını destekler; bu da onları sayaçlar için doğal seçim yapar. Hash'ler (a) çok alanlı nesneler için, set'ler (c) benzersiz sırasız koleksiyonlar için, list'ler (d) sıralı diziler içindir — hiçbiri tek bir skaler değer üzerinde doğrudan atomik sayısal artış sunmaz.
Redis Data StructuresZorluk 1
RPUSH tasks "a" "b" "c"
LRANGE tasks 0 -1
LRANGE tasks 0 -1 ne döner?
- aSadece ilk eleman, "a"
- bSadece son eleman, "c"
- cTüm elemanlar: "a", "b", "c"✓
- dHata verir, çünkü -1 geçerli bir index değildir
Açıklama:LRANGE key start stop negatif index'leri destekler; -1 son elemanı ifade eder. Dolayısıyla 0 -1 tüm listeyi kapsar ve elemanları sırayla döner: "a", "b", "c". Negatif index'ler normal, belgelenmiş bir özelliktir (d yanlış) ve aralık tek bir uca sınırlı değildir (a, b).
Redis Data StructuresZorluk 2
Bir kullanıcı profilini (isim, email, yaş) tek bir Redis key altında saklamak ve sadece yaş alanını, tüm nesneyi yeniden yazmadan güncelleyebilmek istiyorsun. Hangi veri tipi en uygun?
- aHash; her profil alanı içinde bir field-value çifti olarak✓
- bString; tüm profili bir JSON blob olarak saklayıp her güncellemede yeniden yazarak
- cList; her alan değiştiğinde yeni bir profil versiyonu ekleyerek
- dSet; her field-value çifti bir set üyesi olarak
Açıklama:Hash, tek bir key altında field isimlerini value'lara eşler; bu yüzden HSET user:1 age 31 tek bir O(1) komutla sadece o alanı günceller, tüm nesneyi okuyup-değiştirip-yazmaya gerek kalmaz. JSON string (b) çalışır ama tek bir alan değişikliği için bile tüm blob'un okunup yeniden yazılmasını zorunlu kılar. List'in (c) adlandırılmış alan kavramı yoktur ve sınırsız büyür. Set'in (d) field-value yapısı yoktur ve kısmi alan güncellemesini temiz şekilde desteklemez.
Redis Data StructuresZorluk 1
Bir Redis Set'in (List'in aksine) üyeleri hakkında verdiği garanti nedir?
- aÜyeler her zaman eklendikleri sırayla döner
- bÜyeler otomatik olarak alfabetik sıralanır
- cÜyeler, bir list gibi birden fazla kez görünebilir
- dHer üye benzersizdir — duplicate'ler otomatik olarak reddedilir✓
Açıklama:Redis Set, benzersiz string'lerden oluşan sırasız bir koleksiyondur; aynı üyeyi SADD ile iki kez eklemenin ikinci seferde hiçbir etkisi yoktur. Ekleme-sırası garantisi (a) yoktur ve otomatik alfabetik sıralama (b) yoktur (buna en yakın olan Sorted Set'in score'a göre sıralamasıdır, o da varsayılan olarak alfabetik değildir). Duplicate'lere izin verilmesi (c) tam olarak Set'in engellediği şeydir.
Redis Data StructuresZorluk 2
Her oyuncunun sayısal bir skoru olduğu, ilk 10 oyuncuyu skora göre sıralı ve verimli şekilde çekmen gereken canlı bir liderlik tablosu kurmak istiyorsun. Hangi veri tipi tam olarak bunun için tasarlanmıştır?
- aHer oyuncu için düz bir String, sonra uygulama tarafında client-side sıralama
- bSkorları kabaca sırada tutmak için
LPUSH kullanan bir List - cSıralama değeri olarak score'u kullanan bir Sorted Set (ZSET)✓
- dScore'ların benzersiz olması gerekmediği için bir Set
Açıklama:Sorted Set her üyeyi bir kayan noktalı score ile saklar ve üyeleri (bir skip list aracılığıyla) dahili olarak bu score'a göre sıralı tutar; bu yüzden ZRANGE/ZREVRANGE O(log N + M) karmaşıklıkla bir top-N dilimi çekebilir. Düz string'ler (a) tüm sıralama işini client'a iter ve her oyuncunun çekilmesini gerektirir. List'in (b) score-tabanlı sıralama kavramı yoktur — LPUSH sadece pozisyonu etkiler, rank'i değil. Set'in (d) hiç score'u yoktur, bu yüzden ranking mümkün değildir.
Redis Data StructuresZorluk 1
SET counter 10
INCR counter
GET counter
Son
GET counter ne döner?
- a"11"✓
- b"10"
- cHata verir, çünkü INCR sadece INCR ile oluşturulmuş key'lerde çalışır
- d"101", çünkü INCR 1'i karakter olarak ekler
Açıklama:INCR, string değeri bir integer olarak parse eder ve atomik olarak 1 artırır, sonucu tekrar string olarak saklar. "10" 11 olur, "11" olarak saklanır. INCR, key'in nasıl oluşturulduğundan bağımsız olarak geçerli bir integer tutan her string üzerinde çalışır (c yanlış) ve string birleştirme değil, sayısal artış yapar (d yanlış).