码迷,mamicode.com
首页 > 其他好文 > 详细

Redis数据结构之列表

时间:2020-05-10 21:04:49      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:列表   str   trie   并且   pre   指定元素   pivot   字符   长度   

列表类型用来存储多个有序字符串,可以从两端进行插入(push)和弹出(pop)操作,获取指定范围的元素列表,获取指定索引的元素等

常用命令

添加

lpush:从左边插入元素

lpush key value1 value2 ...

rpush:从右边插入元素

rpush key value1 value2 ...

linsert:在某个元素前或后插入元素,返回列表长度

linsert key before|after pivot value

d元素前添加e元素

127.0.0.1:6379[2]> rpush list a b c d
(integer) 4
127.0.0.1:6379[2]> linsert list before d e
(integer) 5
127.0.0.1:6379[2]> lrange list 0 -1
1) "a"
2) "b"
3) "c"
4) "e"
5) "d"

查询

lrange:获取指定范围的元素列表

索引从0开始,最后一个元素的索引为-1

lrange key start end

获取全部元素:

lrange key 0 -1

lindex:获取指定索引下标的元素

lindex key index

获取最后一个元素:

lindex key -1

llen:获取列表长度

llen key

删除

lpop:从左侧弹出元素(删除并返回)

lpop key 
127.0.0.1:6379[2]> lrange list 0 -1
1) "a"
2) "b"
3) "c"
4) "e"
5) "d"
127.0.0.1:6379[2]> lpop list
"a"
127.0.0.1:6379[2]> lrange list 0 -1
1) "b"
2) "c"
3) "e"
4) "d"

rpop:从右侧弹出元素(删除并返回)

rpop key

lrem:删除指定元素

lrem key count value

lrem会从列表中找到value元素进行删除,根据count分为三种情况:

  • count > 0从左到右,删除最多 count 个元素。
  • count < 0从右到左,删除最多 count 绝对值 个元素。
  • count = 0删除所有

除了lpop和rpop两个弹出命令外,还有两个弹出命令,叫做阻塞弹出,分别是blpopbrpop

blpop:规定时间内获取并移除数据,timeout:单位为秒

blpop key timeout

如果列表不为空,就立刻返回列表和弹出的元素

127.0.0.1:6379[2]> blpop list 10
"list"
"a"

如果列表为空,就阻塞timeout长时间,如果指定时间内其他客户端没有添加元素就返回nil,如果指定时间内其他客户端添加了元素 ,就返回列表和弹出的元素

127.0.0.1:6379[2]> blpop list 10
(nil)
(10.05s)

修改

lset:修改指定索引下标的元素

lset key index newValue

修改列表索引为0的元素为b:

127.0.0.1:6379[2]> lrange list 0 -1
1) "c"
2) "f"
3) "e"
127.0.0.1:6379[2]> lset list 0 b
OK
127.0.0.1:6379[2]> lrange list 0 -1
1) "b"
2) "f"
3) "e"

内部编码

列表类型内部有2种编码

  • ziplist(压缩列表):当列表的元素个数 小于 list-max-ziplist-entries 配置(默认 512 个)并且每个元素的值都小于list-max-ziplist-value 配置时(默认 64 字节),Redis就会采用ziplist来减少内存的使用
  • linkedlist(链表列表):当 列表类型 无法满足 ziplist 的条件时, Redis 会使用 linkedlist 作为 列表内部实现

可以使用object encoding key查看当前编码

当元素小于521个,且元素值小于64字节

127.0.0.1:6379> rpush listkey e1 e2 e3
(integer) 3
127.0.0.1:6379> object encoding listkey
"ziplist"

当元素大于521个

27.0.0.1:6379> rpush listkey e4 e5 ... e512 e513
(integer) 513
127.0.0.1:6379> object encoding listkey
"linkedlist"

Redis3.2 版本提供了 quicklist 内部编码,简单地说它是以一个 ziplist节点linkedlist,它结合了 ziplistlinkedlist 两者的优势,为 列表类型 提供了一种更为优秀的 内部编码 实现

常用场景

消息队列

通过lpushbrpop可以实现消息队列,生产方通过lpush添加元素,多个消费方通过brpop获取元素

通过lpushlpop可以实现栈

分页功能

通过lrange可以实现列表的分页功能

Redis数据结构之列表

标签:列表   str   trie   并且   pre   指定元素   pivot   字符   长度   

原文地址:https://www.cnblogs.com/dingjn/p/12864685.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!