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_valuekey: 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>