1. 程式人生 > >Redis資料型別-List

Redis資料型別-List

一.概述

Java中 :  陣列  Arraylist  ,連結串列 linkedList

陣列的特點:根據索引取值速度是極快的(和資料量的大小無關)

                     陣列的增刪改查,效率極低(資料量越大,效率越低)

連結串列的特點:連結串列的元素增刪,效率極高(和資料量的大小無關)

                     根據索引取值,效率極低(資料量越大,效率越低)

為什麼redis選取了連結串列?

因為redis操作中,做的最多的操作是元素的增刪 

使用環境:

1.     做大資料集合的增刪

2.     做任務佇列

二.List的命令

注意:redis中是用連結串列來儲存資料的,連結串列的頭稱為左端

,連結串列的尾稱為右端

1.取值

1.檢視列表

lrangkey start end

獲取連結串列中從start到end的元素的值,start、end從0開始計數;也可以為負數,若為-1,則表示連結串列尾部的元素,-2表示倒數第二個,依次類推
2.賦值

1.倆端新增

 lpush key values[value1,value2…] 

在指定的key所關聯的list頭部插入所有的values,如果該key不存在,該命令在執行插入之前建立一個與該key關聯的空連結串列,之後再向該連結串列的頭部插入資料。插入成功,返回元素的個數
 rpush key values[value1,value2…] 

在該list的尾部新增元素,返回元素的個數

注意:這倆個命令的新增效果是不一樣的     

 lpush list1 a,b,c,d -------------à新增後的順序:d,c,b,a

 rpush list2 a,b,c,d ------------à新增後的順序:a,b,c,d
3.刪除

1.兩端彈出(本質就是刪除)

 lpop key

 返回並彈出指定的key關聯的連結串列中的第一個元素,即頭部元素,如果該key不存在,則返回(nil),若key存在,則返回連結串列的頭部元素
 rpop key

 返回並彈出指定的key關聯的連結串列中的最後一個元素,即尾部元素,如果該key不存在,則返回(nil)若key存在,則返回連結串列的尾部元素

注意:redis是不會保留空字串,空鍵值對的

三.list的擴充套件命令

獲取列表中的元素個數

 llen key

 返回指定的key關聯的連結串列中的元素數量

刪除某個元素(效率極為低下,瞭解即可)

lrem key count value 

刪除count個值為value的元素,如果count大於0,從頭到尾遍歷並刪除count 個值為value的元素;如果count小於0,從尾到頭遍歷並刪除count個值為value的元素;如果count等於0,則刪除連結串列中所有等於value的資料

通過索引替換元素(效率不高)

lset keyindex value

設定連結串列中的index的腳標的元素值,0代表連結串列的頭元素,-1代表連結串列的尾元素,操作連結串列的腳標,不存在則拋異常

在索引前/後插入元素(效率不高)

linsert key before/after pivot value

在pivot元素前或者後插入value這個元素

做任務佇列需要

rpoplpush resource destination

將連結串列中的尾部元素彈出並新增到頭部(可以迴圈操作)   
例如:
兩排佇列    
    rpoplpush list1 list2  
    把list1中的尾部元素彈出,並新增到list2
迴圈列表
    rpoplpush list1 list1
    把list1中的尾部元素彈出,新增到list1的頭部