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
Redis Lists implementation, queue ve stack operations. LPUSH, RPUSH, LPOP, RPOP komutları ile message queue ve job processing patterns.
List
, sıralı bir string koleksiyonudur. Her liste bir key altında tutulur ve elemanlar eklenme sırasına göre dizilir. Listeye hem baştan hem sondan veri eklenebilir veya çıkarılabilir. Bu özellikleri sayesinde yığın (stack) ve kuyruk (queue) işlemleri için idealdir.LPUSH
) ya da sondan (RPUSH
) ekleme yapılabilir.2^32 - 1
(yaklaşık 4 milyar eleman).Kullanım | Açıklama |
---|---|
Mesaj Kuyruğu | queue:email → [job1, job2, job3] |
Log Kayıtları | logs:app:1 → [log1, log2, log3] |
Görev listesi | tasks:user:123 → [taskA, taskB] |
Ziyaret geçmişi | history:product:42 → [user1, user2] |
Komut | Açıklama | Örnek |
---|---|---|
LPUSH | Listenin başına eleman ekler. | LPUSH sepet "elma" |
RPUSH | Listenin sonuna eleman ekler. | RPUSH sepet "armut" |
LRANGE | Belirli aralıktaki elemanları getirir. | LRANGE sepet 0 -1 |
LPOP | Listenin başındaki elemanı çıkarır. | LPOP sepet |
RPOP | Listenin sonundaki elemanı çıkarır. | RPOP sepet |
LLEN | Listenin eleman sayısını verir. | LLEN sepet |
LREM | Belirli değeri listeden siler. | LREM sepet 1 "elma" |
LSET | Belirli indeksteki değeri günceller. | LSET sepet 0 "çilek" |
LINDEX | Belirli indeksteki değeri getirir. | LINDEX sepet 1 |
LPUSH
: Elemanı listenin başına ekler.
RPUSH
: Elemanı listenin sonuna ekler.text127.0.0.1:6379> Rpush Keywords Kubilay // Keywords listesinin sonuna "Kubilay" ekliyoruz. (integer) 1 // Listenin şu anki eleman sayısı döndürülüyor. 127.0.0.1:6379> Rpush Keywords Bozak // Keywords listesinin sonuna "Bozak" ekliyoruz. (integer) 2 // Listenin şu anki eleman sayısı döndürülüyor. 127.0.0.1:6379> Rpush Keywords Refis // Keywords listesinin sonuna "Redis" ekliyoruz. (integer) 3 // Listenin şu anki eleman sayısı döndürülüyor. 127.0.0.1:6379> Rpush Keywords Ders Notlari // Keywords listesinin sonuna "Ders" ve "Notlari" ekliyoruz. (integer) 5 // İki eleman eklendiği için toplam eleman sayısı 5 oldu. 127.0.0.1:6379>
LPUSH
veya RPUSH
komutu bu key için yeni bir liste oluşturur.LPUSH
veya RPUSH
kullanıldığında tip uyuşmazlığı hatası döner.
Yukarıda bulunan örnekte önce String tipinde sepet key değeri tanımlanmış ve buna sen liste olarak Elma'yı sola ekle diyoruz bundan dolayı hataya düşüyor.text127.0.0.1:6379> SET sepet "metin" // "sepet" key'ine string türünde "metin" değeri atanıyor. OK // İşlem başarılı olduğunu gösterir. 127.0.0.1:6379> LPUSH sepet "elma" // String olan key'e liste elemanı eklemeye çalışıyoruz. (error) WRONGTYPE Operation against a key holding the wrong kind of value // Tür uyuşmazlığı hatası.
LPUSH
ve RPUSH
komutlarına aynı anda birden fazla eleman verilebilir. Bu durumda değerler sırasıyla eklenir.
text127.0.0.1:6379> RPUSH liste "a" "b" "c" // Listeye aynı anda üç eleman ekliyoruz. (integer) 3 // Listenin toplam eleman sayısı döndürülüyor.
LPUSH
→ veriyi başından eklerRPUSH
→ veriyi sonundan eklerLLEN
komutu kullanılabilir:LPUSH
) veya sondan (RPUSH
) ekleme/silme işlemi yapmak hızlıdır. Ancak listenin ortasında işlem yapılmak istendiğinde performans düşebilir.text127.0.0.1:6379> LRANGE Keywords 0 -1 // Keywords listesinin tüm elemanlarını görüntülüyoruz. 1) "Kubilay" // Listenin 1. elemanı. 2) "Bozak" // Listenin 2. elemanı. 3) "Redis" // Listenin 3. elemanı. 4) "Ders" // Listenin 4. elemanı. 5) "Notlari" // Listenin 5. elemanı. 127.0.0.1:6379>
0 -1
→ tüm listeyi döndürür.start
ve end
parametreleri, elemanların sırasına göre çalışır.
İndeksler 0'dan başlar, negatif değerler sondan saymak için kullanılır.-1
: son eleman
-2: sondan bir önceki eleman
-n
: sondan n. elemanend
parametresi dahil edilir. Yani LRANGE liste 0 2
→ 0, 1 ve 2. indeksli elemanları getirir.LRANGE
komutu hata vermez, sadece boş bir dizi döner:
127.0.0.1:6379> LRANGE EmptyList 0 -1
(empty array)
127.0.0.1:6379>
text127.0.0.1:6379> SET StringKey "Kubilay" // "StringKey" adında string bir key oluşturuyoruz. OK // İşlem başarılı olduğunu gösterir. 127.0.0.1:6379> LRANGE StringKey 0 -1 // String olan key'e liste komutu uyguluyoruz. (error) WRONGTYPE Operation against a key holding the wrong kind of value // Tür uyuşmazlığı hatası. 127.0.0.1:6379>
LRANGE
büyük listelerde tüm elemanları getirirse performans düşebilir.
Özellikle LRANGE key 0 -1
gibi tüm listeyi çekmek, çok sayıda eleman varsa önerilmez.
Sayfalamalı LRANGE
kullanımı daha verimlidir:
text127.0.0.1:6379> LRANGE BigListKey 0 9 // Büyük listeden ilk 10 elemanı alıyoruz (0-9 indeksleri). 1) "0" // Listenin 1. elemanı. 2) "1" // Listenin 2. elemanı. 3) "2" // Listenin 3. elemanı. 4) "3" // Listenin 4. elemanı. 5) "4" // Listenin 5. elemanı. 6) "5" // Listenin 6. elemanı. 7) "6" // Listenin 7. elemanı. 8) "7" // Listenin 8. elemanı. 9) "8" // Listenin 9. elemanı. 10) "9" // Listenin 10. elemanı. 127.0.0.1:6379> LRANGE BigListKey 10 19 // Büyük listeden sonraki 10 elemanı alıyoruz (10-19 indeksleri). 1) "10" // Listenin 11. elemanı. 2) "20" // Listenin 12. elemanı. 3) "30" // Listenin 13. elemanı. 4) "40" // Listenin 14. elemanı. 5) "50" // Listenin 15. elemanı. 6) "60" // Listenin 16. elemanı. 7) "70" // Listenin 17. elemanı. 8) "8" // Listenin 18. elemanı. 127.0.0.1:6379>
LPOP
: Başından alır ve siler.RPOP
: Sonundan alır ve siler.
text127.0.0.1:6379> LRANGE Keywords 0 -1 // Keywords listesinin tüm elemanlarını görüntülüyoruz. 1) "Kubilay" // Listenin 1. elemanı. 2) "Bozak" // Listenin 2. elemanı. 3) "Redis" // Listenin 3. elemanı. 4) "Ders" // Listenin 4. elemanı. 5) "Notlari" // Listenin 5. elemanı. 127.0.0.1:6379> LPOP Keywords // Listenin başından (solundan) eleman çıkarıyoruz. "Kubilay" // Çıkarılan eleman döndürülüyor. 127.0.0.1:6379> LRANGE Keywords 0 -1 // Listenin güncel durumunu kontrol ediyoruz. 1) "Bozak" // İlk eleman çıkarıldığı için "Bozak" birinci sıraya geldi. 2) "Redis" // Listenin yeni 2. elemanı. 3) "Ders" // Listenin yeni 3. elemanı. 4) "Notlari" // Listenin yeni 4. elemanı. 127.0.0.1:6379> RPOP Keywords // Listenin sonundan (sağından) eleman çıkarıyoruz. "Notlari" // Çıkarılan eleman döndürülüyor. 127.0.0.1:6379> LRANGE Keywords 0 -1 // Listenin güncel durumunu kontrol ediyoruz. 1) "Bozak" // Listenin 1. elemanı. 2) "Redis" // Listenin 2. elemanı. 3) "Ders" // Son eleman çıkarıldığı için "Ders" son eleman oldu. 127.0.0.1:6379>
nil
dönertext127.0.0.1:6379> SET sepet "tekil veri" // "sepet" key'ine string değer atıyoruz. OK // İşlem başarılı olduğunu gösterir. 127.0.0.1:6379> LPOP sepet // String olan key'den liste elemanı çıkarmaya çalışıyoruz. (error) WRONGTYPE Operation against a key holding the wrong kind of value // Tür uyuşmazlığı hatası.
LPOP
ve RPOP
komutları, kaç eleman çıkarılacağını belirlemek için sayı parametresi alabilir:
text127.0.0.1:6379> LRANGE Keywords 0 -1 // Keywords listesinin tüm elemanlarını görüntülüyoruz. 1) "Bozak" // Listenin 1. elemanı. 2) "Redis" // Listenin 2. elemanı. 3) "Ders" // Listenin 3. elemanı. 127.0.0.1:6379> RPOP Keywords 2 // Listenin sonundan 2 eleman çıkarıyoruz. 1) "Ders" // Çıkarılan 1. eleman. 2) "Redis" // Çıkarılan 2. eleman. 127.0.0.1:6379> LRANGE Keywords 0 -1 // Listenin güncel durumunu kontrol ediyoruz. 1) "Bozak" // Listede kalan tek eleman. 127.0.0.1:6379>
LPOP
/ RPOP
ile alınan veriler tekrar listede bulunmaz. Bu nedenle veri kaybı yaşamamak için önce LRANGE
ile kontrol edip sonra çıkarmak gerekebilir.0
döner.text127.0.0.1:6379> LLEN Keywords // Keywords listesinin eleman sayısını kontrol ediyoruz. (integer) 1 // Listede 1 eleman olduğu döndürülüyor. 127.0.0.1:6379> llen BigListKey // BigListKey listesinin eleman sayısını kontrol ediyoruz. (integer) 18 // Listede 18 eleman olduğu döndürülüyor. 127.0.0.1:6379>
LLEN
komutu 0
döner. Bu, Redis’in diğer komutlarında olduğu gibi hata vermek yerine sessizce çalışmasına olanak tanır.String
, Set
, Hash
), LLEN
komutu bir tür hatası döner:LLEN
komutu her zaman sabit zamanda (O(1)
) çalışır. Yani büyük listelerde bile çok hızlıdır ve performans kaygısı olmadan kullanılabilir.key
: Liste ismi (örneğin: Keywords
)count
: Kaç adet silineceği> 0
: Baştan itibaren sil< 0
: Sondan itibaren sil= 0
: Listede eşleşen tüm değerleri silvalue
: Hangi değeri sileceğiztext127.0.0.1:6379> LRANGE SecondKeywords 0 -1 // SecondKeywords listesinin tüm elemanlarını görüntülüyoruz. 1) "Kubilay" // Listenin 1. elemanı. 2) "Bozak" // Listenin 2. elemanı. 3) "Redis" // Listenin 3. elemanı. 4) "Egitimi" // Listenin 4. elemanı. 5) "DELETEDVALUE" // Silinecek elemanımız. 6) "Ders" // Listenin 6. elemanı. 7) "Notlari" // Listenin 7. elemanı. 127.0.0.1:6379> LREM SecondKeywords 1 "DELETEDVALUE" // Listeden "DELETEDVALUE" değerini 1 adet sil. (integer) 1 // 1 eleman silindiği döndürülüyor. 127.0.0.1:6379> LRANGE SecondKeywords 0 -1 // Listenin güncel durumunu kontrol ediyoruz. 1) "Kubilay" // Listenin 1. elemanı. 2) "Bozak" // Listenin 2. elemanı. 3) "Redis" // Listenin 3. elemanı. 4) "Egitimi" // Listenin 4. elemanı. 5) "Ders" // "DELETEDVALUE" silindi, sıra kaydı. 6) "Notlari" // Listenin son elemanı. 127.0.0.1:6379>
count
parametresine göre davranır count
parametresi LREM
'in davranışını doğrudan etkiler:
count değeri | Anlamı |
---|---|
> 0 | Baştan başlayarak en fazla count adet eşleşen değeri siler. |
< 0 | Sondan başlayarak en fazla abs(count) adet eşleşen değeri siler. |
= 0 | Tüm listeyi tarar ve eşleşen tüm değerleri siler. |
Yanlış count kullanımı, fark etmeden tüm eşleşenleri silebilir! |
LREM
, sadece tam eşleşen string'leri siler. Büyük/küçük harf farkına dikkat edilmelidir:
text127.0.0.1:6379> LRANGE SecondKeywords 0 -1 // SecondKeywords listesinin tüm elemanlarını görüntülüyoruz. 1) "Kubilay" // Listenin 1. elemanı. 2) "Bozak" // Listenin 2. elemanı. 3) "Redis" // Listenin 3. elemanı. 4) "Egitimi" // Listenin 4. elemanı. 5) "Ders" // Listenin 5. elemanı. 6) "Notlari" // Listenin 6. elemanı. 127.0.0.1:6379> LREM SecondKeywords 0 "KubilaY" // "KubilaY" değerini silmeye çalışıyoruz (büyük/küçük harf farklı). (integer) 0 // Hiçbir eleman silinmedi, eşleşme bulunamadı. 127.0.0.1:6379> LRANGE SecondKeywords 0 -1 // Listenin değişmediğini kontrol ediyoruz. 1) "Kubilay" // Listenin 1. elemanı. 2) "Bozak" // Listenin 2. elemanı. 3) "Redis" // Listenin 3. elemanı. 4) "Egitimi" // Listenin 4. elemanı. 5) "Ders" // Listenin 5. elemanı. 6) "Notlari" // Listenin 6. elemanı. 127.0.0.1:6379> LREM SecondKeywords 0 "Kubilay" // "Kubilay" değerini siliyoruz (doğru büyük/küçük harf). (integer) 1 // 1 eleman silindiği döndürülüyor. 127.0.0.1:6379> LRANGE SecondKeywords 0 -1 // Listenin güncel durumunu kontrol ediyoruz. 1) "Bozak" // "Kubilay" silindi, "Bozak" birinci sıraya geldi. 2) "Redis" // Listenin 2. elemanı. 3) "Egitimi" // Listenin 3. elemanı. 4) "Ders" // Listenin 4. elemanı. 5) "Notlari" // Listenin 5. elemanı. 127.0.0.1:6379>
0
döner Bu durum hata değildir, ama hiçbir şey silinmediği anlamına gelir count
değeri doğru belirlenmezse, istenenden fazla ya da yanlış sırada silme yapılabilir. Özellikle tekrarlayan verilerde count = 0
tehlikelidir çünkü hepsini siler.
text127.0.0.1:6379> clear // Terminal ekranını temizliyoruz. 127.0.0.1:6379> Rpush SecondKeywords Kubilay Kubilay Kubilay // Listeye aynı anda 3 adet "Kubilay" ekliyoruz. (integer) 8 // Listede artık toplam 8 eleman var. 127.0.0.1:6379> LRANGE SecondKeywords 0 -1 // Listenin tüm elemanlarını görüntülüyoruz. 1) "Bozak" // Listenin 1. elemanı. 2) "Redis" // Listenin 2. elemanı. 3) "Egitimi" // Listenin 3. elemanı. 4) "Ders" // Listenin 4. elemanı. 5) "Notlari" // Listenin 5. elemanı. 6) "Kubilay" // Yeni eklenen 1. "Kubilay". 7) "Kubilay" // Yeni eklenen 2. "Kubilay". 8) "Kubilay" // Yeni eklenen 3. "Kubilay". 127.0.0.1:6379> LREM SecondKeywords 0 "Kubilay" // Tüm "Kubilay" değerlerini siliyoruz (count=0). (integer) 3 // 3 eleman silindiği döndürülüyor. 127.0.0.1:6379> LRANGE SecondKeywords 0 -1 // Listenin güncel durumunu kontrol ediyoruz. 1) "Bozak" // Tüm "Kubilay" değerleri silindi. 2) "Redis" // Listenin 2. elemanı. 3) "Egitimi" // Listenin 3. elemanı. 4) "Ders" // Listenin 4. elemanı. 5) "Notlari" // Listenin 5. elemanı. 127.0.0.1:6379>
LREM
sadece List veri türü ile çalışır. Eğer key başka bir türdeyse (örneğin string), hata alırsınız:LSET key index new_value
key
: Liste adı (örneğin: urunler
)index
: Güncellenecek öğenin sırasınew_value
: Yeni değertextRPUSH SEPET ELMA ARMUT SEKER CAY KAHVE // SEPET listesine beş eleman ekliyoruz. (integer) 5 // Listede toplam 5 eleman olduğu döndürülüyor. 127.0.0.1:6379> LRANGE SEPET 0 -1 // SEPET listesinin tüm elemanlarını görüntülüyoruz. 1) "ELMA" // Listenin 1. elemanı. 2) "ARMUT" // Listenin 2. elemanı. 3) "SEKER" // Listenin 3. elemanı. 4) "CAY" // Listenin 4. elemanı. 5) "KAHVE" // Listenin 5. elemanı. 127.0.0.1:6379> LSET SEPET 0 ANANAS // 0. indeksteki elemanı "ANANAS" ile değiştiriyoruz. OK // İşlem başarılı olduğunu gösterir. 127.0.0.1:6379> LRANGE SEPET 0 -1 // Değişiklik sonrası listeyi görüntülüyoruz. 1) "ANANAS" // İlk eleman "ELMA"dan "ANANAS"a değişti. 2) "ARMUT" // Diğer elemanlar değişmedi. 3) "SEKER" // Listenin 3. elemanı. 4) "CAY" // Listenin 4. elemanı. 5) "KAHVE" // Listenin 5. elemanı. 127.0.0.1:6379>
-1
: Son eleman
-2
: Sondan bir önceki elemantext127.0.0.1:6379> LSET SEPET -1 "MADEN SUYU" // Son elemanı "MADEN SUYU" ile değiştiriyoruz. OK // İşlem başarılı olduğunu gösterir. 127.0.0.1:6379> LRANGE SEPET 0 -1 // Değişiklik sonrası listeyi görüntülüyoruz. 1) "ANANAS" // Listenin 1. elemanı. 2) "ARMUT" // Listenin 2. elemanı. 3) "SEKER" // Listenin 3. elemanı. 4) "CAY" // Listenin 4. elemanı. 5) "MADEN SUYU" // Son eleman "KAHVE"den "MADEN SUYU"ya değişti. 127.0.0.1:6379>
text127.0.0.1:6379> LSET SEPET -10 "MADEN SUYU" // Geçersiz index kullanıyoruz. (error) ERR index out of range // Index aralık dışında hatası. 127.0.0.1:6379>
LINDEX
komutu, Redis listesi içinde belirli bir index'teki öğeyi okumak (getirmek) için kullanılır.
Liste üzerinde değeri değiştirmez, sadece okuma işlemi yapar.
LINDEX key index
LINDEX Komutunun Doğru Söz Dizimi:
key
: Liste adı (örneğin: urunler
)
index
: Okunmak istenen öğenin sırası
text127.0.0.1:6379> LRANGE SEPET 0 -1 // SEPET listesinin tüm elemanlarını görüntülüyoruz. 1) "ANANAS" // Listenin 1. elemanı. 2) "ARMUT" // Listenin 2. elemanı. 3) "SEKER" // Listenin 3. elemanı. 4) "CAY" // Listenin 4. elemanı. 5) "MADEN SUYU" // Listenin 5. elemanı. 127.0.0.1:6379> LINDEX SEPET 0 // 0. indeksteki elemanı okuyoruz. "ANANAS" // İlk eleman olan "ANANAS" döndürülüyor. 127.0.0.1:6379>
text127.0.0.1:6379> LRANGE SEPET 0 -1 // SEPET listesinin tüm elemanlarını görüntülüyoruz. 1) "ANANAS" // Listenin 1. elemanı. 2) "ARMUT" // Listenin 2. elemanı. 3) "SEKER" // Listenin 3. elemanı. 4) "CAY" // Listenin 4. elemanı. 5) "MADEN SUYU" // Listenin 5. elemanı. 127.0.0.1:6379> LINDEX SEPET -1 // Son elemanı okuyoruz (negatif index). "MADEN SUYU" // Son eleman olan "MADEN SUYU" döndürülüyor. 127.0.0.1:6379> LINDEX SEPET -2 // Sondan ikinci elemanı okuyoruz. "CAY" // Sondan ikinci eleman olan "CAY" döndürülüyor. 127.0.0.1:6379>
nil
döner
text127.0.0.1:6379> LRANGE SEPET 0 -1 // SEPET listesinin tüm elemanlarını görüntülüyoruz. 1) "ANANAS" // Listenin 1. elemanı. 2) "ARMUT" // Listenin 2. elemanı. 3) "SEKER" // Listenin 3. elemanı. 4) "CAY" // Listenin 4. elemanı. 5) "MADEN SUYU" // Listenin 5. elemanı. 127.0.0.1:6379> LINDEX SEPET -20 // Geçersiz index kullanıyoruz. (nil) // Geçersiz index için nil döndürülüyor. 127.0.0.1:6379>