6. Redis List列表相關(guān)命令

Redis列表是簡單的字符串列表,排序插入順序。您可以在頭部或列表的尾部Redis的列表添加元素弛矛。

列表的最大長度為232 - 1 (每個列表超過4十億元素4294967295)元素。

例子

redis 127.0.0.1:6379> LPUSH tutorials redis
(integer) 1
redis 127.0.0.1:6379> LPUSH tutorials mongodb
(integer) 2
redis 127.0.0.1:6379> LPUSH tutorials mysql
(integer) 3
redis 127.0.0.1:6379> LRANGE tutorials 0 10

1) "mysql"
2) "mongodb"
3) "redis"

列表底層實現(xiàn)是雙向鏈表實現(xiàn)的,所有獲取頭部和尾部的數(shù)據(jù)時速度最快政勃,越往中間走越慢。如果通過index則效率會降低

LPUSH key value [value]

向鏈表左端添加元素兼砖,values是按左到右依次插入的奸远,返回值為列表中元素個數(shù),列表元素可以重復(fù)

127.0.0.1:6379> LPUSH list a b c
(integer) 3
127.0.0.1:6379> LPUSH list a b c
(integer) 6
127.0.0.1:6379> LRANGE list 0 6
1) "c"
2) "b"
3) "a"
4) "c"
5) "b"
6) "a"

RPUSH key value [value]

向鏈表右端添加元素讽挟,其他與LPUSH相同

127.0.0.1:6379> RPUSH list d e f
(integer) 9
127.0.0.1:6379> LRANGE list 0 9
1) "c"
2) "b"
3) "a"
4) "c"
5) "b"
6) "a"
7) "d"
8) "e"
9) "f"

LPUSHX key value

向列表左端添加元素懒叛,只有key存在時才可以添加

127.0.0.1:6379> EXiSTS list1
(integer) 0
127.0.0.1:6379> LPUSHX list1 a
(integer) 0
127.0.0.1:6379> LPUSHX list g
(integer) 10

RPUSHX key value

向列表右端添加元素,其他與LPUSHX相同

LPOP key

將左端列表元素彈出耽梅,會將其從列表中刪除薛窥,如果key不存在則返回(nil)

127.0.0.1:6379> LPOP list
"g"
127.0.0.1:6379> LPOP list
"c"

RPOP key

將右端列表元素彈出,其他同LPOP

LLEN key

返回列表的長度眼姐,如果列表不存在則返回0

127.0.0.1:6379> LLEN list
(integer) 8
127.0.0.1:6379> LLEN list1
(integer) 0

LRANGE key start end

獲取鏈表一個區(qū)間的值

127.0.0.1:6379> LRANGE list 0 -1
1) "b"  // 獲得所有元素
2) "a"
3) "c"
4) "b"
5) "a"
6) "d"
7) "e"
8) "f
127.0.0.1:6379> LRANGE list 0 0
1) "b"

LREM key count value##

刪除列表中指定的值拆檬,返回值為刪除的元素的個數(shù),count值有以下幾種:

  • count > 0: 從列表的頭開始妥凳,向尾部搜索竟贯,移除與value相等的元素,移除count個

  • count < 0: 從列表尾部開始逝钥,向頭部搜索屑那,移除與value相等的元素,移除-count個

  • count == 0: 移除列表中所有與value相等的元素

      127.0.0.1:6379> LPUSH list a b c d e f a b c d e f a b c d a b c d
      (integer) 20
      127.0.0.1:6379> LLEN list
      (integer) 20
      127.0.0.1:6379> LREM list 2 b
      (integer) 2
      127.0.0.1:6379> LRANGE 0 1000
      (error) ERR wrong number of arguments for 'lrange' command
      127.0.0.1:6379> LRANGE list 0 1000
       1) "d"
       2) "c"
       3) "a"
       4) "d"
       5) "c"
       6) "a"
       7) "f"
       8) "e"
       9) "d"
      10) "c"
      11) "b"
      12) "a"
      13) "f"
      14) "e"
      15) "d"
      16) "c"
      17) "b"
      18) "a"
      127.0.0.1:6379> LREM list 2 d
      (integer) 2
      127.0.0.1:6379> LRANGE list 0 1000
       1) "c"
       2) "a"
       3) "c"
       4) "a"
       5) "f"
       6) "e"
       7) "d"
       8) "c"
       9) "b"
      10) "a"
      11) "f"
      12) "e"
      13) "d"
      14) "c"
      15) "b"
      16) "a"
      127.0.0.1:6379> LREM list -2 a
      (integer) 2
      127.0.0.1:6379> LRANGE list 0 1000
       1) "c"
       2) "a"
       3) "c"
       4) "a"
       5) "f"
       6) "e"
       7) "d"
       8) "c"
       9) "b"
      10) "f"
      11) "e"
      12) "d"
      13) "c"
      14) "b"
      127.0.0.1:6379> LREM list 0 c
      (integer) 4
      127.0.0.1:6379> LRANGE list 0 1000
       1) "a"
       2) "a"
       3) "f"
       4) "e"
       5) "d"
       6) "b"
       7) "f"
       8) "e"
       9) "d"
      10) "b"
      127.0.0.1:6379> LREM list1 0 c
      (integer) 0
    

LINDEX key index

獲得指定索引元素的值艘款,如果索引超出范圍返回(nil),支持負數(shù)下標

127.0.0.1:6379> LINDEX list 2
"f"
127.0.0.1:6379> LINDEX list 100
(nil)
127.0.0.1:6379> LINDEX list -1
"b"

LSET key index value##

設(shè)置指定索引元素的值持际,如果列表不存在或者索引超出范圍報錯,支持負數(shù)下標

127.0.0.1:6379> LSET list 0 g
OK
127.0.0.1:6379> LINDEX list 0
"g"
127.0.0.1:6379> LINDEX list -1
"g"
127.0.0.1:6379> LSET list1 0 a
(error) ERR no such key
127.0.0.1:6379> LSET list 100 g
(error) ERR index out of range

LTRIM key start end

只保留列表片段哗咆,支持負數(shù)下標蜘欲,如果區(qū)間范圍超出所有范圍,則列表被清空

127.0.0.1:6379> LLEN list
(integer) 10
127.0.0.1:6379> LTRIM list 0 5
OK
127.0.0.1:6379> LLEN list
(integer) 6
127.0.0.1:6379> LRANGE list  0 100
1) "g"
2) "a"
3) "f"
4) "e"
5) "d"
6) "b"
127.0.0.1:6379> LTRIM list 4 -1
OK
127.0.0.1:6379> LRANGE list  0 100
1) "d"
2) "b"
127.0.0.1:6379> LTRIM list 100 1000
OK  // 列表被清空
127.0.0.1:6379> LLEN list
(integer) 0

LINSERT key BEFORE|AFTER pivot value

向列表插入元素晌柬,如果列表中沒有pivot則什么都不做

127.0.0.1:6379> LRANGE list 0 -1
 1) "a"
 2) "b"
 3) "c"
 4) "d"
 5) "e"
 6) "f"
 7) "g"
 8) "h"
 9) "i"
10) "j"
11) "k"
127.0.0.1:6379> LINSERT list BEFORE b "redis"
(integer) 12
127.0.0.1:6379> LRANGE list 0 -1
 1) "a"
 2) "redis"
 3) "b"
 4) "c"
 5) "d"
 6) "e"
 7) "f"
 8) "g"
 9) "h"
10) "i"
11) "j"
12) "k"
127.0.0.1:6379> LINSERT list BEFORE z "redis"
(integer) -1

RPOPLPUSH keysource keydestination##

將元素從一個列表轉(zhuǎn)到另一個列表姥份,返回pop的元素,如果原不存在則返回(nil)

127.0.0.1:6379> RPOPLPUSH list list1
"k"
127.0.0.1:6379> LRANGE list1 0 -1
1) "k"
127.0.0.1:6379> RPOPLPUSH list2 list1
(nil)

BLPOP key1 [key2 ] timeout

取出并獲取列表中的第一個元素年碘,或阻塞澈歉,直到有可用,任意個list有可用都會停止阻塞
如果list中有元素則與LPOP處理相同屿衅,如果list為空時埃难,會阻塞直到有可用的值,或者timeout,當timeout設(shè)定為0時會一直等待

127.0.0.1:6379> EXISTS list
(integer) 0
127.0.0.1:6379> BLPOP list 0
//本線程阻塞涡尘,在另外一個線程插入元素 LPUSH list a
1) "list"
2) "a"
(8.96s)

BRPOP key1 [key2 ] timeout

取出并獲取列表中的最后一個元素忍弛,或阻塞,直到有可用考抄,邏輯與BLPOP相同

BRPOPLPUSH source destination timeout

從source列表中彈出一個值剧罩,它推到destination列表并返回它;或阻塞,直到source中有可用座泳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市幕与,隨后出現(xiàn)的幾起案子挑势,更是在濱河造成了極大的恐慌,老刑警劉巖啦鸣,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件潮饱,死亡現(xiàn)場離奇詭異,居然都是意外死亡诫给,警方通過查閱死者的電腦和手機香拉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來中狂,“玉大人凫碌,你說我怎么就攤上這事∥搁牛” “怎么了盛险?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長勋又。 經(jīng)常有香客問我苦掘,道長,這世上最難降的妖魔是什么楔壤? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任鹤啡,我火速辦了婚禮,結(jié)果婚禮上蹲嚣,老公的妹妹穿的比我還像新娘递瑰。我一直安慰自己,他們只是感情好隙畜,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布泣矛。 她就那樣靜靜地躺著,像睡著了一般禾蚕。 火紅的嫁衣襯著肌膚如雪您朽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音哗总,去河邊找鬼几颜。 笑死,一個胖子當著我的面吹牛讯屈,可吹牛的內(nèi)容都是我干的蛋哭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼涮母,長吁一口氣:“原來是場噩夢啊……” “哼谆趾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叛本,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤沪蓬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后来候,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跷叉,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年营搅,在試婚紗的時候發(fā)現(xiàn)自己被綠了云挟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡转质,死狀恐怖园欣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情休蟹,我是刑警寧澤俊庇,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站鸡挠,受9級特大地震影響辉饱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拣展,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一彭沼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧备埃,春花似錦姓惑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辅搬,卻和暖如春唯沮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工介蛉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萌庆,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓币旧,卻偏偏與公主長得像践险,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吹菱,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容