Redis資料型別-List
阿新 • • 發佈:2019-01-11
一.概述
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的頭部