redis(2)-api-list

列表(list) 类型是用来存储多个有序的字符串, 如图2-18所示, a、b、 c、 d、 e五个元素从左到右组成了一个有序的列表, 列表中的每个字符串称为元素(element) , 一个列表最多可以存储232-1个元素。 在Redis中, 可以对列表两端插入(push) 和弹出(pop) , 还可以获取指定范围的元素列表、 获取指定索引下标的元素等(如图2-18和图2-19所示) 。 列表是一种比较灵活的数据结构, 它可以充当栈和队列的角色, 在实际开发上有很多应用场景。
在这里插入图片描述
列表类型有两个特点: 第一、 列表中的元素是有序的, 这就意味着可以通过索引下标获取某个元素或者某个范围内的元素列表。 第二、 列表中的元素可以是重复的。这两个特点在后面介绍集合和有序集合后, 会显得更加突出, 因此在考虑是否使用该数据结构前, 首先需要弄清楚列表数据结构的特点。
1.添加操作
(1) 从右边插入元素
rpush key value [value …]

(2) 从左边插入元素
lpush key value [value …]
使用方法和rpush相同, 只不过从左侧插入, 这里不再赘述。

(3) 向某个元素前或者后插入元素
linsert key before|after pivot value
linsert命令会从列表中找到等于pivot的元素, 在其前(before) 或者后(after) 插入一个新的元素value。
返回结果代表当前命令的长度。

2.查找

(1) 获取指定范围内的元素列表
lrange key start end
lrange操作会获取列表指定索引范围所有的元素。 索引下标有两个特点: 第一, 索引下标从左到右分别是0到N-1, 但是从右到左分别是-1到-N。第二, lrange中的end选项包含了自身, 这个和很多编程语言不包含end不太相同。

(2) 获取列表指定索引下标的元素
lindex key index

(3) 获取列表长度
llen key

3.删除
(1) 从列表左侧弹出元素
lpop key

(2) 从列表右侧弹出
rpop key
它的使用方法和lpop是一样的, 只不过从列表右侧弹出, 这里不再赘述。

(3) 删除指定元素
lrem key count value
lrem命令会从列表中找到等于value的元素进行删除, 根据count的不同分为三种情况:
·count>0, 从左到右, 删除最多count个元素。
·count<0, 从右到左, 删除最多count绝对值个元素。
·count=0, 删除所有。
例如向列表从左向右插入5个a, 那么当前列表变为“a a a a a java b a”,下面操作将从列表左边开始删除4个为a的元素。

(4) 按照索引范围修剪列表
ltrim key start end

4.修改
修改指定索引下标的元素
lset key index newValue

5.阻塞操作
阻塞式弹出如下:
blpop key [key …] timeout
brpop key [key …] timeout
blpop和brpop是lpop和rpop的阻塞版本, 它们除了弹出方向不同, 使用方法基本相同, 所以下面以brpop命令进行说明, brpop命令包含两个参数:
·key[key…]: 多个列表的键。
·timeout: 阻塞时间(单位: 秒) 。
1) 列表为空: 如果timeout=3, 那么客户端要等到3秒后返回, 如果timeout=0, 那么客户端一直阻塞等下去。

在使用brpop时, 有两点需要注意。
第一点, 如果是多个键, 那么brpop会从左至右遍历键, 一旦有一个键能弹出元素, 客户端立即返回。
第二点, 如果多个客户端对同一个键执行brpop, 那么最先执行brpop命令的客户端可以获取到弹出的值。

内部编码

列表类型的内部编码有两种。
·ziplist(压缩列表) : 当列表的元素个数小于list-max-ziplist-entries配置(默认512个) , 同时列表中每个元素的值都小于list-max-ziplist-value配置时(默认64字节) , Redis会选用ziplist来作为列表的内部实现来减少内存的使用。
·linkedlist(链表) : 当列表类型无法满足ziplist的条件时, Redis会使用linkedlist作为列表的内部实现。
redis3.2之后引入了quicklist,所有的列表实现都是使用quicklist实现的,具体的优点后面的博客会讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值