4.Redis List komutları

Redis lists linkedlist kullanılarak implemente edilmiştir. Bu, bir listenin içinde milyonlarca elemanınız olsa bile, başa veya listenin kuyruğuna yeni bir eleman ekleme işleminin sabit zamanda gerçekleştirildiği anlamına gelir. LPUSH komutu ile yeni bir elemanın, on elemanlı bir listenin başına eklenmesinin hızı, 10 milyon elemanlı listenin başına bir eleman eklemekle aynıdır.

Peki redis listin linkedlist kullanılarak implemente edilmesinin dezavantajı nedir? bir öğeye index üzerinden erişme, bir Array  ile implemente edilmiş listelerde çok hızlıdır ancak linked listeler tarafından uygulanan listelerde o kadar hızlı değildir.

Redis listlerin linked list kullanılarak implemente edilmesinin sebeplerinden biri, databaselerde büyük bir listenin sonuna ya da başına çok hızlı bir şekilde eleman eklenebilmesinin önemli bir mesele olmasından ileri gelir. Büyük bir eleman koleksiyonunun ortasına hızlı erişim önemli olduğunda, sorted set olarak adlandırılan, kullanılabilecek farklı bir veri yapısı vardır.

Aşağıda list veri tipiyle sıkça kullanılan komutlar verilmiştir.

  • List tanımlama ve üstten veri ekleme 
     lpush num 1 2 3 4
  • Liste alttan eleman ekleme
     rpush key number

     rpush num 5
  • Listin üstten elemanını silme. Liste en son eklenen elemanı siler.
     lpop key

     lpop num
  • Listin alttan elemanını silme. Liste en son eklenen elemanı siler.
     rpop key

     rpop num
  • Listin belli aralıklarını index ile çekme. Bir list’e 1 2 3 ve 4 ü  eklediğinizi varsayarsak, ve listten aşağıdaki komutla 0 2 index rangeini çektiğinizi varsayarsak , sonuc 4 3 2 olacaktır.
     lrange key startindex stopindex

     lrange num 0 2
  • Listin uzunluğunu öğrenme
     llen key

     llen num
  • Listeden belli indexi çekme
     lindex key index

     lindex num 3
  • Listenin belli indexine override etme
     lset key index overnumber

     lset num 0 9
  • Listenin elemanı sayını bilmiyorsak tamamını alma
     lrange key 0 -1

     lrange num 0 -1
  • Liste var mı diye kontrol edip varsa push etme. Hatalıysa 0 döner
     lpushx key insertnum

     lpush num 1