Redis List 类型操作及常用命令
七個(gè)原則
lists 類型及操作
list 是一個(gè)鏈表結(jié)構(gòu),主要功能是 push、 pop、獲取一個(gè)范圍的所有值等等, 操作中 key 理解為鏈表的名字。
Redis 的 list 類型其實(shí)就是一個(gè)每個(gè)子元素都是 string 類型的雙向鏈表。鏈表的最大長(zhǎng)度是(2的 32 次方)。我們可以通過(guò) push,pop 操作從鏈表的頭部或者尾部添加刪除元素。這使得 list 既可以用作棧,也可以用作隊(duì)列。
有意思的是 list 的 pop 操作還有阻塞版本的,當(dāng)我們[lr]pop 一個(gè) list 對(duì)象時(shí),如果 list 是空,或者不存在,會(huì)立即返回 nil。但是阻塞版本的 b[lr]pop 可以則可以阻塞,當(dāng)然可以加超時(shí)時(shí)間,超時(shí)后也會(huì)返回 nil。為什么要阻塞版本的 pop 呢,主要是為了避免輪詢。舉個(gè)簡(jiǎn)單的例子如果我們用 list 來(lái)實(shí)現(xiàn)一個(gè)工作隊(duì)列。執(zhí)行任務(wù)的 thread 可以調(diào)用阻塞版本的 pop 去獲取任務(wù)這樣就可以避免輪詢?nèi)z查是否有任務(wù)存在。當(dāng)任務(wù)來(lái)時(shí)候工作線程可以立即返回, 也可以避免輪詢帶來(lái)的延遲。說(shuō)了這么多,接下來(lái)看一下實(shí)際操作的方法吧。
常用命令
lpush
在 key 對(duì)應(yīng) list 的頭部添加字符串元素。返回 list 中元素的個(gè)數(shù)。
127.0.0.1:6379> lpush mylist Jacob (integer) 1 127.0.0.1:6379> lpush mylist Jacob2 (integer) 2lrange
用于去 list 的內(nèi)容,開始為 0,結(jié)束為 list 長(zhǎng)度 -1。若結(jié)束大于等于 list 長(zhǎng)度 -1,默認(rèn)為 list 長(zhǎng)度 -1。
127.0.0.1:6379> lrange mylist 0 -1 1) "Jacob2" 2) "Jacob" 3) "Jacob_r"rpush
在 key 對(duì)應(yīng) list 的尾部添加字符串元素。
127.0.0.1:6379> rpush mylist Jacob_r (integer) 3linsert
在 key 對(duì)應(yīng) list 的特定位置之前或之后添加字符串元素。
127.0.0.1:6379> lrange mylist 0 -1 1) "Jacob2" 2) "Jacob" 3) "Jacob_r" 127.0.0.1:6379> linsert mylist before Jacob Jacob_before (integer) 4 127.0.0.1:6379> lrange mylist 0 -1 1) "Jacob2" 2) "Jacob_before" 3) "Jacob" 4) "Jacob_r"lset
設(shè)置 list 中指定下標(biāo)的元素值(下標(biāo)從 0 開始)
127.0.0.1:6379> lrange mylist 0 1 1) "Jacob2" 2) "Jacob_before" 3) "Jacob" 4) "Jacob_r" 127.0.0.1:6379> lset mylist 0 Jacob1 OK 127.0.0.1:6379> lrange mylist 0 -1 1) "Jacob1" 2) "Jacob_before" 3) "Jacob" 4) "Jacob_r"lrem
從 key 對(duì)應(yīng) list 中刪除 count 個(gè)和 value 相同的元素。
count>0 時(shí),按從頭到尾的順序刪除,具體如下:
count<0 時(shí),按從尾到頭的順序刪除,具體如下:
127.0.0.1:6379> lrange mylist 0 -1 1) "Jacob" 2) "Jacob" 3) "Jacob" 4) "Jacob" 5) "Jacob1" 6) "Jacob_before" 7) "Jacob" 8) "Jacob_r" 127.0.0.1:6379> lrem mylist -2 Jacob (integer) 2 127.0.0.1:6379> lrange mylist 0 -1 1) "Jacob" 2) "Jacob" 3) "Jacob" 4) "Jacob1" 5) "Jacob_before" 6) "Jacob_r"count=0 時(shí),刪除全部,具體如下:
127.0.0.1:6379> lrange mylist 0 -1 1) "Jacob" 2) "Jacob" 3) "Jacob" 4) "Jacob1" 5) "Jacob_before" 6) "Jacob_r" 127.0.0.1:6379> lrem mylist 0 Jacob (integer) 3 127.0.0.1:6379> lrange mylist 0 100 1) "Jacob1" 2) "Jacob_before" 3) "Jacob_r"ltrim
保留指定 key 的值范圍內(nèi)的數(shù)據(jù)。
127.0.0.1:6379> lrange mylist 0 -1 1) "Jacob1" 2) "Jacob_before" 3) "Jacob_r" 127.0.0.1:6379> ltrim mylist 1 -1 OK 127.0.0.1:6379> lrange mylist 0 -1 1) "Jacob_before" 2) "Jacob_r"lpop
從 list 的頭部刪除元素,并返回刪除元素。
127.0.0.1:6379> lrange mylist 0 -1 1) "Jacob_before" 2) "Jacob_r" 127.0.0.1:6379> lpop mylist "Jacob_before" 127.0.0.1:6379> lrange mylist 0 -1 1) "Jacob_r"rpop
從 list 的尾部刪除元素,并返回刪除元素。
127.0.0.1:6379> rpop mylist "Jacob_r" 127.0.0.1:6379> lrange mylist 0 -1 (empty list or set)rpoplpush
從第一個(gè) list 的尾部移除元素并添加到第二個(gè) list 的頭部,最后返回被移除的元素值,整個(gè)操作是原子的.如果第一個(gè) list 是空或者不存在返回 nil。
127.0.0.1:6379> lpush mylist Jacob1 (integer) 1 127.0.0.1:6379> lpush mylist Jacob2 (integer) 2 127.0.0.1:6379> lpush mylist Jacob3 (integer) 3 127.0.0.1:6379> lpush mylist Jacob4 (integer) 4 127.0.0.1:6379> lpush mylist Jacob5 (integer) 5 127.0.0.1:6379> lpush mylist2 Jacob6 (integer) 1 127.0.0.1:6379> lpush mylist2 Jacob7 (integer) 2 127.0.0.1:6379> lpush mylist2 Jacob8 (integer) 3 127.0.0.1:6379> rpoplpush mylist mylist2 "Jacob1" 127.0.0.1:6379> lrange mylist 0 -1 1) "Jacob5" 2) "Jacob4" 3) "Jacob3" 4) "Jacob2" 127.0.0.1:6379> lrange mylist2 0 -1 1) "Jacob1" 2) "Jacob8" 3) "Jacob7" 4) "Jacob6"ps:lpush 是往頭部添加。
lindex
返回名稱為 key 的 list 中 index 位置的元素
127.0.0.1:6379> lindex mylist2 0 "Jacob1"llen
返回 key 對(duì)應(yīng) list 的長(zhǎng)度
127.0.0.1:6379> llen mylist (integer) 4 127.0.0.1:6379> llen mylist2 (integer) 4總結(jié)
以上是生活随笔為你收集整理的Redis List 类型操作及常用命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 第三十六期:如果把线程当作一个人来对待,
- 下一篇: java转码工具_java转码工具nat