您好,登錄后才能下訂單哦!
list是一個內部采用雙向鏈表(double linked list) 結構,像列表兩端添加元素的時間復雜度為O(1)。主要功能是push、pop、獲取一個范圍的所有值等,操作中key理解為鏈表的名字。
鏈表的最大長度是(2的32次方)。我們可以通過push,pop操作從鏈表的頭部或者尾部添加刪除元素。這使得list既可以用作棧,也可以用作隊列。
list的pop操作均有阻塞版本的,當我們[lr]pop一個list對象時,如果list是空,或者不存在,會立即返回nil。但是阻塞版本的b[lr]pop可以則可以阻塞,當然可以加超時時間,超時后也會返回nil。為什么要阻塞版本的pop呢,主要是為了避免輪詢。
舉個簡單的例子如果我們用list來實現一個工作隊列。執行任務的thread可以調用阻塞版本的pop去獲取任務這樣就可以避免輪詢去檢查是否有任務存在。當任務來時候工作線程可以立即返回,也可以避免輪詢帶來的延遲。
LPUSH Key value 左邊插入
RPUSH Key value 右邊插入
LPop key 左邊彈出
RPop key 右邊彈出
BLPOP,BRPOP阻塞式左/右彈出
lpush
129.223.248.154:6379> lpush members ben (integer) 1 129.223.248.154:6379> lpush members jeff (integer) 2 129.223.248.154:6379> lpush members mike jeme (integer) 6
lpop
129.223.248.154:6379> lpop members "raymond" 129.223.248.154:6379> rpop members "ben"
llen
129.223.248.154:6379> llen members (integer) 4
lrange (lrange firstqueue 0 -1 列出list中全部元素值)
129.223.248.154:6379> lrange members 0 2 1) "richard" 2) "jemery" 3) "mike" 129.223.248.154:6379> llen members (integer) 4 129.223.248.154:6379> lrange members 0 3 1) "richard" 2) "jemery" 3) "mike" 4) "jeff" 129.223.248.154:6379> lrange members 0 4 1) "richard" 2) "jemery" 3) "mike" 4) "jeff" 129.223.248.154:6379> lrange members 0 -1 1) "richard" 2) "jemery" 3) "mike" 4) "jeff" 5) "derek"
rpop
129.223.248.154:6379> rpop members "derek" 129.223.248.154:6379> lpop members "richard" 129.223.248.154:6379> lrange members 0 -1 1) "jemery" 2) "mike" 3) "jeff"
lindex
129.223.248.154:6379> lindex members 1 "mike" 129.223.248.154:6379> llen members (integer) 3 129.223.248.154:6379> rpush firstqueue 3 2 1 (integer) 3 129.223.248.154:6379> lrange firstqueue 0 -1 1) "3" 2) "2" 3) "1" 129.223.248.154:6379> lpush secqueue 3 2 (integer) 2 129.223.248.154:6379> lrange secqueue 0 -1 1) "2" 2) "3"
rpoplpush 從第一個list的尾部移除元素并添加到第二個list的頭部,最后返回被移除的元素值,整個操作是原子的.如果第一個list是空或者不存在返回nil
129.223.248.154:6379> rpoplpush firstqueue secqueue "1" 129.223.248.154:6379> lrange firstqueue 0 -1 1) "3" 2) "2" 129.223.248.154:6379> lrange secqueue 0 -1 1) "1" 2) "2" 3) "3" 129.223.248.154:6379>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。