Redis 系列(4) —— 列表

2021-12-06 13:02:13 浏览数 (1)

列表

Redis 的列表是一种先行有序结构,可以安装元素被推入列表中的顺序来存储元素。这些元素既可以是文字数据,又可以是二进制数据。并且列表中的数据可以重复出现

列表的相关命令

1. 往列表中插入元素

从列表右边插入元素的命令格式为rpush key element [element...] 从列表左边插入元素的命令格式为 lpush key element [element...] 向某个元素前或后插入元素的命令格式为 linsert key before|after pivot value 【示例】

代码语言:javascript复制
127.0.0.1:6379> rpush ltest a b c
(integer) 3
127.0.0.1:6379> lpush ltest j k l
(integer) 6
127.0.0.1:6379> linsert ltest before j test
(integer) 7
2. 查找列表中的元素

获取指定范围元素列表的命令格式为 lrange key start stop 获取列表指定索引下的元素的命令格式为 lindex key index 获取表长度的命令格式为 llen key 【示例】

代码语言:javascript复制
127.0.0.1:6379> lrange ltest 2 4
1) "test"
2) "j"
3) "a"
127.0.0.1:6379> lindex ltest 4
"a"
127.0.0.1:6379> llen ltest
(integer) 7
3. 删除列表中的元素的命令格式为

从列表左侧弹出的命令格式为 lpop key 从列表右边弹出的命令格式为 rpop key 删除列表指定元素的命令格式为 lrem key count value,当 count > 0 时是从左到右删除最多 count 个元素,当 count < 0 时是从右到左删除,count = 0 时 是全部删除。 按照索引范围修剪列表 ltrim key start stop

4. 修改列表中元素

修改指定索引下标元素的命令格式为 lset key index element

5. 阻塞命令

阻塞式弹出的命令格式为 blpop key [key...] timeoutbrpop key [key...] timeout 阻塞式弹出并推入的命令格式为 brpoplpush source destination timeout , 该命令用于将弹出源列表的右端元素,并将该元素推入到目标列表的左端。

列表的内部编码

ziplist (压缩列表) : 当列表的元素小于 list-max-ziplist-entries 配置,同时列表中每个元素的值都小于 list-max-ziplist-value 配置时,Redis 会选用 ziplist 来作为列表的内部实现来减少内存的使用。

linkedlist (链表) : 当列表类型无法满足 ziplist 条件时。Redis 会使用 linkedlist 作为列表的内部实现。

列表的使用场景

消息队列

Redis 可以使用利用阻塞命令来实现一个简单的消息队列的功能 Redis 的 lpush brpop 命令即可实现阻塞队列,生产者客户端使用 lpush 从列表左侧插入元素,消费者使用 brpop 来消费列表右侧的元素。

0 人点赞