前言
list 列表类型用来存储多个有的字符串,其结构就类似于 双端队列;
可以在队列两端插入和删除、可以获取指定范围的元素列表、获取指定索引下标的元素。

列表类型的特点 :
- 列表中的元素是有序的,可以通过下标获取某个元素或者某个范围的元素列表
- 列表中的元素是允许重复的
基本命令
添加
-
LPUSH
lpush key element [element...]
在 list 列表左侧添加一个或多个元素

-
RPUSH
rpush key element [element...]
在 list 列表右侧添加一个或多个元素

-
LINSERT
linsert key [before | after] pivot element
在 指定元素 之前/之后 插入一个元素
当 list 列表中 存在多个 pivot 元素时,默认在第一个pivot元素之前或者之后插入
- lpushx / rpushx
lpush、rpush命令当 key 不存在时会 添加一个新的 key,然后再添加元素
lpushx、rpushx 命令当 key 不存在时就添加失败,不会添加一个新的 key。
lpushx key element [element...]
rpushx key element [element...]
查找
-
lrange
lrange key start end
获取 list 列表中对应区间的元素

-
lindex
lindex key index
根据 索引 index 获取对应的元素

-
llen
llen key
获取 list 列表中的元素个数

删除
-
lpop
lpop key
从 list 列表左侧删除一个或者多个

-
rpop
rpop key [count]
从 list 列表右侧删除一个或者多个元素

-
lrem
lrem key count value
删除任意个 value
count :
>0: 从 list 列表左侧删除 count 个value<0: 从 list 列表右侧删除 |count| 个value==0: 删除 list 列表中所有的 value

-
ltrim
ltrim key start end
只保留 list列表中,区间[start, end] 的元素(这里start,end指的都是下标,从0开始)

修改
-
lset
lset key index value
根据下标索引,设置对应的值

阻塞
-
blpop
blpop key [key...] timeout
阻塞版本的 lpop,可以等待多个key
-
brpop
brpop key [key...] timeout
阻塞版本的 rpop,可以等待多个key
- 当 key 对应 list 列表存在元素时,阻塞版本的blpop/brpop和lpop/rpop 没有区别
- 当 key 对应的 list 列表不存在元素时,blpop/brpop 阻塞等待(时间:timeout),而 lpop/rpop 直接返回
内部编码
双重编码策略:ziplist与linkedlist
Redis为List设计了两种内部编码,会根据数据特性自动选择:
-
ziplist 压缩列表
-
linkedlist 双向链表
简单来说当 list 列表中所有字符串元素长度比较小、且元素个数比较少时,就采用 ziplist
当list 列表中存储字符串元素长度比较大,或者元素个数比较多时,就采用 linkedlist
quicklist
从Redis 3.2开始,List的默认编码改为了quicklist。quicklist是ziplist和linkedlist的混合体:它是一个双向链表,但每个节点都是一个ziplist。这样既保留了ziplist的内存效率,又获得了linkedlist的插入性能。
本篇文章到这里就结束了,感谢支持
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2oul0hvapjsws