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