redis的列表是双端的,是有序的。

 双端的,意味着可以左边压入,右边弹出,这就是队列。左边压入,左边弹出,这就是栈。

左侧压入(LPUSH)

1. 使用LPUSH可以实现左侧压入

LPUSH  mylist  "one"

当然可以同时压入多个元素

LPUSH  mylist  "one"  "two"  "three" 

如果mylist不存在,会创建一个list 

2. LPUSHX只有存在list才会压入,不支持批量压入

LPUSHX  mylist  "one" 

右侧压入(RPUSH)

1. 使用RPUSH可以右侧压入

RPUSH  mylist  "one"

当然可以同时压入多个元素

RPUSH  mylist  "one"  "two"  "three"  

 如果mylist不存在,会创建一个list 

2. RPUSHX只有存在list才会压入,不支持批量压入

RPUSHX  mylist "one"

左侧弹出(LPOP)

LPOP  mylist

-- 存在则返回值,否则返回nil

右侧弹出(RPOP)

RPOP  mylist

-- 存在则返回值,否则返回nil

右侧弹出,左侧压入(RPOPLPUSH)

RPOPLPUSH用来从list1的右侧弹出元素压入list2的左端 

RPOPLPUSH  list1  list2

list1 和 list2可以是同一个list

获取列表元素数量(LLEN)

使用LLEN获取列表元素的个数 

LLEN  mylist

-- 3

获取指定位置的元素(LINDEX)

使用LINDEX可以获取指定位置的元素,0~len-1, -len~-1 

LINDEX  mylist  0

-- 第一个元素

LINDEX  mylist  -1

-- 最后一个元素

获取指定范围的元素(LRANGE)

使用LRANGE获取指定范围的元素,支持负索引

LRANGE  key  start  end

例如,获取1-3个元素

LRANGE  mylist  0  2 

设置指定位置的元素(LSET)

LSET可以设置指定位置的元素

LSET  key  index  val

例如,对mylist的第一个元素,更新为book

LSET  mylist  0  "book" 

在指定元素的前面/后面插入新的元素(LINSERT)

在two前面插入one,后面插入three 

LINSERT  mylist  BEFORE  "two"  "one"

LINSERT  mylist  AFTER  "two"  "three" 

保留指定范围的元素(LTRIM)

如果只保留指定范围的元素,删除其他的元素,可以使用LTRIM 

LTRIM  key  start  end

例如保留前两个元素

LTRIM  mylist  0  1 

移除所有、指定个数的元素(LREM)

1. 移除所有匹配项 

LREM  key  0  val

例如删除所有的one

LREM  mylist  0  "one" 

2. 从左边开始,删除指定个数的元素

从左边开始,删除最多2两个one 

LREM  mylist  2  "one"

3. 从右边开始,删除指定个数的元素 

从右边开始,删除最多3两个one 

LREM  mylist  -3  "one"

阻塞式获取元素(BLPOP, BRPOP, BRPOPLPUSH)

1. 使用BLPOP可以在没有元素的时候阻塞,直到可用 或超时

BLPOP  mylist  5

要么直接返回值,要么阻塞等待,直到可用或5s超时

2. BRPOP 可以在没有元素的时候阻塞,直到可用 或超时,方向是右端弹出

BRPOP  mylist  10

要么直接返回值,要么阻塞等待,直到可用或10s超时 

3. BRPOPLPUSH,阻塞式等待元素可用或超时

作用与RPOPLPUSH类似,区别在于阻塞效果

BRPOPLPUSH  mylist1  mylist2  10

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐