搜索
写经验 领红包
 > 动物

edis数据结构list底层(edis几种数据结构)

导语:redis的第三种数据结构 list

redis数据结构list底层(redis 几种数据结构)

前几篇文章介绍了redis的string和hash,今天讲一下list。

list的命令基本都以L开头

1.从右边插入列表 rpush key value1 value2 …

> rpush list1 1 a 2(integer) 3 lpushx Key values……  存在才push

3. 查看列表 lrange key start stop

> lrange list1 0 -11) &34;2) &34;3) &34;4) &34;5) &34;> lrange list1 2 41) &34;2) &34;3) &34;

4. linsert key before|after pivot element

tips: pivot  支点;枢轴;中心点> linsert list1 before a 1.5(integer) 6> lrange list1 0 -11) &34;2) &34;3) &34;4) &34;5) &34;6) &34;> linsert list1 after a b(integer) 7> lrange list1 0 -11) &34;2) &34;3) &34;4) &34;5) &34;6) &34;7) &34;如果列表里面有2个a  会怎么样呢?rpush list2 1 a 2 a 3(integer) 5> linsert list2 before a 1.5(integer) 6> lrange list2 0 -11) &34;2) &34;3) &34;4) &34;5) &34;6) &34; 看来是从左往右,只对第一个a有效

5.左侧弹出一个元素 lpop key

> lpop list2&34;

6.右侧弹出一个元素 rpop key

> rpop list2&34;

7.删除指定个数的值 lrem key count element

count>0 从左到右删count个和element相等的值count<0 从右到左删count个和element相等的值count=0 删除所有和element相等的值先准备数据> rpush list3 1 a 2 a 3 a 4 a 5 a(integer) 10> rpush list4 1 a 2 a 3 a 4 a 5 a(integer) 10> rpush list5 1 a 2 a 3 a 4 a 5 a(integer) 10左到右删2个a:> lrem list3 2 a(integer) 2> lrange list3 0 -11) &34;2) &34;3) &34;4) &34;5) &34;6) &34;7) &34;8) &34;右到左删2个a:> lrem list4 -2 a(integer) 2> lrange list4 0 -11) &34;2) &34;3) &34;4) &34;5) &34;6) &34;7) &34;8) &34;删除所有和element相等的值> lrem list5 0 a(integer) 5> lrange list5 0 -11) &34;2) &34;3) &34;4) &34;5) &34;

8.切片,只保留start到stop(包含)之间的元素 ltrim key start stop

> ltrim list5 2 4OK> lrange list5 0 -11) &34;2) &34;3) &34;

9.获取指定索引的值 lindex key index

> lindex list5 -1&34;> lindex list5 -3&34;> lindex list5 0&34;

10.获取列表长度 llen key

> llen list5(integer) 3

11.设置指定索引处的值 lset key index element

> lset list5 2 33OK> lrange list5 0 -11) &34;2) &34;3) &34;

12.阻塞版rpop: brpop key timeout

先pop清空列表:> lrange list5 0 -1(empty array)tips 当列表清空时,key也被自动删除了:> exists list5(integer) 0当list中有元素时,马上返回:> rpush list5 1(integer) 1> brpop list5 31) &34;2) &34;当list中没有元素时,等待timeout秒后才返回:> brpop list5 3(nil)(3.08s)当list中没有元素且timeout为0时,一直阻塞,直到取到结果:> brpop list5 01) &34;2) &34;(95.95s)

13.阻塞版lpop: blpop key timeout功能特性和上面的brpop一样。

14.rpoplpush source destination

将source列表末尾元素a弹出,将其加入destination列表头,并返回a> rpush list1 1 2 3(integer) 3> rpush list2 4 5 6(integer) 3> rpoplpush list1 list2&34;> lrange list2 0 -11) &34;2) &34;3) &34;4) &34;如果source不存在,则立马返回nil,不再做其它的> rpoplpush notexist list2(nil)> lrange list2 0 -11) &34;2) &34;3) &34;4) &34;如果source 和 destination 一样,则等同于旋转操作> rpoplpush list2 list2&34;> lrange list2 0 -11) &34;2) &34;3) &34;4) &34;

15.brpoplpush source destinationrpoplpush的阻塞版,功能一样

16.one more thing同一侧的push和pop 约等于 栈一侧push 另一侧 pop 约等于 队列push 加 ltrim 可实现指定长度的队列push 加 阻塞pop 约等于 消息队列

喜欢的朋友欢迎点赞/转发/关注,进主页查看更多技术文章,redis系列文章持续更新中,谢谢朋友们!

本文内容由小玥整理编辑!