redis list 使用和理解

歷精圖治發表於2018-11-08
key element
user:1:message a-b-c-d-e-f
  • lpush :左邊加入
  • lpop:左邊彈出
  • rpush :右邊加入
  • rpop :左邊彈出
  • llen:長度
  • lrem:移除某個元素
  • lrange :擷取某一段的元素
  • lindex:某個位置的元素

特點:

  • 有序
  • 可以重複
  • 左右兩邊可以插入彈出
rpush key value1 value2  value3 
#從列表右端插入值 
lpush key value1 value2  ...valuen 
#從列表左端插入值 1-N  
linsert key before|after value newvalue 
#在list指定的值前|後 插入newvalue 
lpop key 
#從列表左側彈出一個item 
rpop 
#從列表右側彈出一個item 
lrem key count value 
#根據count值 從列表中刪除所有value相等的項 
 (1) count>0 從左到右 ,刪除最多countg個value相等的項 
 (2)count<0 從右到左,刪除最多Math.abs(count)個value相等的專案 
 (3) count = 0,刪除所有value相等的項
 
abcdef
lrem listkey 0 a ccbf
lrem listkey -1 c cbf
ltrim key start end  
#按照索引範圍修剪列表 
abcdef
ltrim listkey 1 4 bcde
ltrim listkey 0 2 bcd
查 
lrange key start end (包括end)
#獲取列表制定索引範圍所有item
abcdef 
lindex key index 
#獲取列表制定索引的item 
llen key 
#獲取列表的長度 
abcdef
lrange listkey 0 2 abc
lrange listkey 1 -1 bcdef
lindex listkey 1 a
lindex listkey -1 f
llen key 6
lset key index newvalue 
#設定列表制定索引值為newvalue 
abcdef
lset listkey 2 java abjavadef

實戰:
TimeLine
你關注的人更新微博:lpush
weibo10129
weibo998
weibo10194
weibo10158
weibo100

bl0op key timeout 
#lpop  阻塞版本 timeout是阻塞超時時間,timeout=0 為永遠不會阻塞 
brpop key timeout 
#rpop  阻塞版本 timeout為阻塞超時時間,timeout=0 永遠不阻塞  

tips

  1. lrush +lpop = stack
  2. lpush +rpop = queue
  3. lpush + ltrim = capped collection
  4. lpush +brpop+ = message queue

相關文章