返回顶部
首页 > 资讯 > 数据库 >Redis基础教程第6节 List
  • 711
分享到

Redis基础教程第6节 List

2024-04-02 19:04:59 711人浏览 安东尼
摘要

list是一个内部采用双向链表(double linked list) 结构,像列表两端添加元素的时间复杂度为O(1)。主要功能是push、pop、获取一个范围的所有值等,操作中key理解为链表的名字。链表

list是一个内部采用双向链表(double linked list) 结构,像列表两端添加元素的时间复杂度为O(1)。主要功能是push、pop、获取一个范围的所有值等,操作中key理解为链表的名字。

链表的最大长度是(2的32次方)。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list既可以用作栈,也可以用作队列。


list的pop操作均有阻塞版本的,当我们[lr]pop一个list对象时,如果list是空,或者不存在,会立即返回nil。但是阻塞版本的b[lr]pop可以则可以阻塞,当然可以加超时时间,超时后也会返回nil。为什么要阻塞版本的pop呢,主要是为了避免轮询。


举个简单的例子如果我们用list来实现一个工作队列。执行任务的thread可以调用阻塞版本的pop去获取任务这样就可以避免轮询去检查是否有任务存在。当任务来时候工作线程可以立即返回,也可以避免轮询带来的延迟。


LPUSH Key value 左边插入

RPUSH Key value 右边插入

LPop key 左边弹出

RPop key 右边弹出

BLPOP,BRPOP阻塞式左/右弹出


lpush

129.223.248.154:6379> lpush members ben
(integer) 1
129.223.248.154:6379> lpush members jeff
(integer) 2
129.223.248.154:6379> lpush members mike jeme
(integer) 6


lpop

129.223.248.154:6379> lpop members
"raymond"
129.223.248.154:6379> rpop members
"ben"


llen

129.223.248.154:6379> llen members
(integer) 4


lrange  (lrange firstqueue 0 -1 列出list中全部元素值)

129.223.248.154:6379> lrange members 0 2
1) "richard"
2) "jemery"
3) "mike"
129.223.248.154:6379> llen members
(integer) 4
129.223.248.154:6379> lrange members 0 3
1) "richard"
2) "jemery"
3) "mike"
4) "jeff"
129.223.248.154:6379> lrange members 0 4
1) "richard"
2) "jemery"
3) "mike"
4) "jeff"
129.223.248.154:6379> lrange members 0 -1
1) "richard"
2) "jemery"
3) "mike"
4) "jeff"
5) "derek"


rpop

129.223.248.154:6379> rpop members
"derek"
129.223.248.154:6379> lpop members
"richard"
129.223.248.154:6379> lrange members 0 -1
1) "jemery"
2) "mike"
3) "jeff"


lindex

129.223.248.154:6379> lindex members 1
"mike"
129.223.248.154:6379> llen members
(integer) 3
129.223.248.154:6379> rpush firstqueue 3 2 1
(integer) 3
129.223.248.154:6379> lrange firstqueue 0 -1
1) "3"
2) "2"
3) "1"
129.223.248.154:6379> lpush secqueue 3 2
(integer) 2
129.223.248.154:6379> lrange secqueue 0 -1
1) "2"
2) "3"


rpoplpush  从第一个list的尾部移除元素并添加到第二个list的头部,最后返回被移除的元素值,整个操作是原子的.如果第一个list是空或者不存在返回nil

129.223.248.154:6379> rpoplpush firstqueue secqueue
"1"
129.223.248.154:6379> lrange firstqueue 0 -1
1) "3"
2) "2"
129.223.248.154:6379> lrange secqueue 0 -1
1) "1"
2) "2"
3) "3"
129.223.248.154:6379>


您可能感兴趣的文档:

--结束END--

本文标题: Redis基础教程第6节 List

本文链接: https://lsjlt.com/news/39319.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作