redis筆記04-link 鏈表結構

LPUSH key value [value ...]

將一個或多個值 value 插入到列表 key 的表頭(l指left),如果有多個 value 值,那麼各個 value 值按從左到右的順序依次插入到表頭:

如說,對空列表 mylist 執行命令 LPUSH mylist a b c ,列表的值將是 c b a .返回值: 操作後的元素數量

注:

1:key 不存在,自動創建空列表並執行 LPUSH 操作。

2:key 存在但不是列表類型時,返回一個錯誤。

3:rpush key value 是把值插入到鏈表尾部,不再單述

4:lpushx 在key不存在時,不自動創建鏈接,不再單述

 

LPOP key

移除並返回列表 key 的頭元素。返回值:列表的頭元素。

當 key 不存在時,返回 nil。

注: rpop key 移除並返回列表key的尾元素,不單述

 

BLPOP key [key ...] timeout

BLPOP 是列表的阻塞式(blocking)彈出原語。

它是 LPOP 命令的阻塞版本,當給定列表內沒有任何元素可供彈出的時候,連接將被 BLPOP 命令阻塞,直到等待超時或發現可彈出元素爲止。

當給定多個 key 參數時,按參數 key 的先後順序依次檢查各個列表,彈出第一個非空列表的頭元素並結束命令。

注:

1: timeout爲0則不超時

2: 此功能有什麼用??

brpop:阻塞彈出隊列尾部的元素,不再單述

 

LLEN key

返回列表 key 的長度。

注:key 不存在,返回 0;key 不是列表類型,返回錯誤

 

LRANGE key start stop

返回列表指定區間內的元素,區間以偏移量 start 和 stop 指定。左數從0開始,右數-1開始

注:

1:start大於length,或start位於stop右邊,則LRANGE 返回一個空列表

2:如果 stop 下標比 end 下標還要大,Redis將 stop 的值設置爲 end

 

LREM key count value

根據參數 count 的值,移除列表中與參數 value 相等的元素。

count 的值可以是以下幾種:

count > 0 : 從表頭開始向表尾搜索,移除與 value 相等的元素,數量爲 count 。

count < 0 : 從表尾開始向表頭搜索,移除與 value 相等的元素,數量爲 count 的絕對值。

count = 0 : 移除表中所有與 value 相等的值。

返回值:被移除元素的數量。注:key不存在,則返回0。

 

LTRIM key start stop

剪切列表,左數從0開始,右數-1開始

LTRIM 命令通常和 LPUSH 命令或 RPUSH 命令配合使用,舉個例子:

LPUSH log newest_log

LTRIM log 0 99

 

LINDEX key index

返回列表 key 中,下標爲 index 的元素。左數從0開始,右數-1開始。如果 key 不是列表類型,返回一個錯誤。

返回值:列表中下標爲 index 的元素。如果 index 參數的值不在列表的區間範圍內(out of range),返回 nil 。如果 key不是列表返回錯誤

 

LINSERT key BEFORE|AFTER searchValue value

將值 value 插入到列表 key 當中,位於值 searchValue 之前或之後。

找到searchValue,返回link的新長度;如果沒有找到 searchValue ,返回 -1;如果 key 不存在或爲空列表,返回 0。

 

RPOPLPUSH source destination

命令 RPOPLPUSH 在一個原子時間內,執行以下兩個動作:

將列表 source 中的最後一個元素(尾元素)彈出,並返回給客戶端。

將 source 彈出的元素插入到列表 destination ,作爲 destination 列表的的頭元素。

注:source destination可以是同一個鏈表

有什麼用?

1:安全隊列 rpoplpush + rpop

2:循環鏈表 單鏈表+rpoplpush 形成循環鏈表

注:brpoplpush 的行爲表現爲阻塞,即source爲空時等待,不單述

----------------------------------------------------------------------------

lpush key value 作用: 把值插入到鏈接頭部;

rpush key value 作用: 把值插入到鏈接尾部;

lrange key start stop

作用: 返回鏈表中[start ,stop]中的元素

規律: 左數從0開始,右數從-1開始。要取所有元素就是從0到-1.

lpop key value 作用: 從鏈接頭部刪除值;

rpop key value 作用: 從鏈接尾部刪除值;

lrem key count value

作用: 從key鏈表中刪除 value值

注: 刪除count的 絕對值 個value後結束

count>0 從表頭刪除,例如3 表示從前往後刪除3個。

count<0 從表尾刪除,例如-3表示從後往前刪除3個。

[命令] 從左向右刪除1個b lrem answer 1 b

[命令] 從右向左刪除2個a lrem answer -2 a

ltrim key start stop

作用: 剪切key對應的鏈接,切[start,stop]一段,並把該段重新賦給key

[命令]截取2和5之間的一段 ltrim wx 2 5 (wx:a b c d e f)

[命令]截取1和-2之間的一段 ltrim wx 1 -2

lindex key index

作用: 返回index索引上的值,如 lindex key 2

llen key

作用:計算鏈接表的元素個數

linsert key after|before search value

作用: 在key鏈表中尋找’search’,並在search值之前|之後,.插入value

注: 一旦找到一個search後,命令就結束了,因此不會插入多個value

[命令]在3前面插入一個2 linsert num before 3 2 (num:1 3 6 8 9)

[命令]在9後面插入一個10 linsert num after 9 10

rpoplpush source bak

作用: 把source的尾部拿出,放在bak的頭部,並返回 該單元值

場景: task + bak 雙鏈表完成安全隊列

業務邏輯:

1:Rpoplpush task bak

2:接收返回值,並做業務處理

3:如果成功,rpop bak 清除任務. 如不成功,下次從bak表裏取任務

brpop / blpop key timeout

作用:等待彈出key的尾(brpop)/頭(blpop)元素,

Timeout爲等待超時時間。如果timeout爲0,則一直等待。

場景: 長輪詢Ajax,在線聊天時,能夠用到

[案例]開兩個終端,其中一個使用 brpop job 20,表示等待20秒;另一個rpush job e 表示給job寫入數據,此時再回到第一個終端。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章