List 列表
列表类型是用来存储多个有序的字符串,
如图:

a、b、c、d、e 五个元素从左到右组成 了⼀个有序的列表,列表中的每个字符串称为元素(element),⼀个列表最多可以存储个元素。在 Redis 中,可以对列表两端插⼊(push)和弹出(pop),还可以获取指定范围的元素列表、 获取指定索引下标的元素等列表是⼀种⽐较灵活的数据结构,它可以充当栈和队列的⻆⾊,在实际开发上有很多应⽤场景
Redis列表(Lists)类型的特点如下:
-
有序性:Redis列表是按照插入顺序来保存元素的。
-
可重复性:Redis列表中的元素可以重复。
-
长度可变性:Redis列表可以动态增长和缩小,可以随时添加或删除元素。
-
支持左右两端插入和删除操作:Redis列表提供了从左端或右端插入和删除元素的操作,可以方便地实现队列和栈。
-
支持范围操作:Redis列表提供了类似于数组的下标范围操作,可以获取指定范围内的元素。
-
适合存储有序数据:Redis列表适合存储有序数据,如消息队列、最新消息列表、日志记录等。
总之,Redis列表是一种非常灵活的数据结构,可以用于各种不同的场景,具有很高的实用价值。
Redis基本命令:
- LPUSH key value1 [value2 ...] - 在列表左边插入一个或多个元素
- RPUSH key value1 [value2 ...] - 在列表右边插入一个或多个元素
- LPOP key - 移除并返回列表最左边的元素
- RPOP key - 移除并返回列表最右边的元素
- LINDEX key index - 返回列表中指定索引位置的元素
- LLEN key - 返回列表的长度
- LRANGE key start stop - 返回列表中指定范围内的元素
- LREM key count value - 移除列表中指定数量的元素
- LTRIM key start stop - 保留列表中指定范围内的元素,其它元素均被删除
- BLPOP key [key ...] timeout - 阻塞并等待列表最左边的元素,并在超时时间内返回结果
- BRPOP key [key ...] timeout - 阻塞并等待列表最右边的元素,并在超时时间内返回结果
从这里我们可以发现,每个基本类型中基本命令开头必带有类型的首字母,但是在 List 中发现首字母不仅只有 L 还有 R;
原因在于: list 是一个双向链表,既可以头插头删,也可以尾插尾删;
L 代表 Left R 代表 Right
不只是 L 和 R ;这里居然还有 B 开头的。
这是我自己记的笔记:百度网盘 ,可以查看命令比较具体的细节
BLPOP:
B 代表 Block 阻塞,L 表示 Left ,这个命令就意味着:阻塞并等待列表最左边的元素,并在超时时间内返回结果
返回值为:取出的元素或者 nil。
内部编码
列表类型的内部编码有两种:
-
ziplist(压缩列表):当列表的元素个数⼩于 list-max-ziplist-entries 配置(默认 512 个),同时列表中每个元素的⻓度都⼩于 list-max-ziplist-value 配置(默认 64 字节)时,Redis 会选⽤ziplist 来作为列表的内部编码实现来减少内存消耗
-
linkedlist(链表):当列表类型⽆法满⾜ ziplist 的条件时,Redis 会使⽤ linkedlist 作为列表的内部实现。
当元素个数较少并没有大元素时,内部编码为 ziplist:
1 127.0.0.1:6379> rpush listkey e1 e2 e3
2 OK
3 127.0.0.1:6379> object encoding listkey
4 "ziplist"
1 127.0.0.1:6379> rpush listkey e1 e2 e3 ... 省略 e512 e513
2 OK
3 127.0.0.1:6379> object encoding listkey
4 "linkedlist"
1 127.0.0.1:6379> rpush listkey "one string is bigger than 64 bytes ... 省略 ..."
2 OK
3 127.0.0.1:6379> object encoding listkey
4 "li

最低0.47元/天 解锁文章
1281

被折叠的 条评论
为什么被折叠?



