列表
Redis 的列表是一种先行有序结构,可以安装元素被推入列表中的顺序来存储元素。这些元素既可以是文字数据,又可以是二进制数据。并且列表中的数据可以重复出现
列表的相关命令
1. 往列表中插入元素
从列表右边插入元素的命令格式为rpush key element [element...]
从列表左边插入元素的命令格式为 lpush key element [element...]
向某个元素前或后插入元素的命令格式为 linsert key before|after pivot value
【示例】
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
【示例】
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...] timeout
和 brpop 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 来消费列表右侧的元素。