Redis 列表(List)

Redis 列表是简单的字符串链接列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。一个列表最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过 40 亿个元素)。

Redis列表通常用于:

(1)实现堆栈和队列。

(2)为后台工作系统构建队列管理。

实例

(1)将列表视为队列(先进先出),如下:

127.0.0.1:6379> lpush work:queue:ids 101
(integer) 1
127.0.0.1:6379> lpush work:queue:ids 237
(integer) 2
127.0.0.1:6379> rpop work:queue:ids
"101"
127.0.0.1:6379> rpop work:queue:ids
"237"

(2)将列表视为堆栈(先入后出),如下:

127.0.0.1:6379> lpush work:queue:ids 101
(integer) 1
127.0.0.1:6379> lpush work:queue:ids 237
(integer) 2
127.0.0.1:6379> lpop work:queue:ids
"237"
127.0.0.1:6379> lpop work:queue:ids
"101"

(3)检查列表的长度,如下:

127.0.0.1:6379> lpush work:queue:ids 101
(integer) 1
127.0.0.1:6379> lpush work:queue:ids 237
(integer) 2
127.0.0.1:6379> llen work:queue:ids
(integer) 2

(4)要创建一个不超过 100 个元素的上限列表,您可以在每次调用 LPUSH 后调用 LTRIM,如下:

127.0.0.1:6379> LPUSH notifications:user:1 "You've got mail!"
(integer) 1
127.0.0.1:6379> LTRIM notifications:user:1 0 99
OK
127.0.0.1:6379> LPUSH notifications:user:1 "Your package will be delivered at 12:01 today."
(integer) 2
127.0.0.1:6379> LTRIM notifications:user:1 0 99
OK

Redis列表命令

下面列出了列表相关的基本命令。

BLPOP命令

移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。语法:

BLPOP key1 [key2 ] timeout

实例:

127.0.0.1:6379> lpush list:mykey 100 200 300
(integer) 3
127.0.0.1:6379> blpop list:mykey 1000
1) "list:mykey"
2) "300"

BRPOP命令

移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。语法:

BRPOP key1 [key2 ] timeout

实例:

127.0.0.1:6379> lpush list:mykey 100 200 300
(integer) 3
127.0.0.1:6379> brpop list:mykey 1000
1) "list:mykey"
2) "100"

BRPOPLPUSH命令

从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。语法:

BRPOPLPUSH source destination timeout

实例:

127.0.0.1:6379> lpush list:key1 100
(integer) 1
127.0.0.1:6379> lpush list:key2 200
(integer) 1
127.0.0.1:6379> brpoplpush list:key1 list:key2 1000
"100"
127.0.0.1:6379> lrange list:key1 0 -1
(empty list or set)
127.0.0.1:6379> lrange list:key2 0 -1
1) "100"
2) "200"

LINDEX命令

通过索引获取列表中的元素。语法:

LINDEX key index

实例:

127.0.0.1:6379> lpush list:mykey 100 200 300
(integer) 3
127.0.0.1:6379> lindex list:mykey 2
"100"
127.0.0.1:6379> lindex list:mykey 1
"200"

LINSERT命令

在列表的元素前或者后插入元素。语法:

LINSERT key BEFORE|AFTER pivot value

实例:

127.0.0.1:6379> lpush list:mykey 100 200 300
(integer) 3
127.0.0.1:6379> llen list:mykey
(integer) 3
127.0.0.1:6379> linsert list:mykey before 200 900
(integer) 4
127.0.0.1:6379> lrange list:mykey 0 -1
1) "300"
2) "900"
3) "200"
4) "100"

LLEN命令

获取列表长度。语法:

LLEN key

实例:

127.0.0.1:6379> lpush list:mykey 100 200 300
(integer) 3
127.0.0.1:6379> llen list:mykey
(integer) 3

LPOP命令

移出并获取列表的第一个元素。语法:

LPOP key

实例:

127.0.0.1:6379> lpush list:mykey 100 200 300
(integer) 3
127.0.0.1:6379> lpop list:mykey
"300"

LPUSH命令

将一个或多个值插入到列表头部。语法:

LPUSH key value1 [value2]

实例:

127.0.0.1:6379> lpush list:mykey 100
(integer) 1
127.0.0.1:6379> lpush list:mykey 200 300 400
(integer) 4

LPUSHX命令

将一个值插入到已存在的列表头部。语法:

LPUSHX key value

实例:

127.0.0.1:6379> lpush list:key1 100 200
(integer) 2
127.0.0.1:6379> lpushx list:key1 900
(integer) 3
127.0.0.1:6379> lpushx list:key2 900
(integer) 0

LRANGE命令

获取列表指定范围内的元素。语法:

LRANGE key start stop

实例:

127.0.0.1:6379> lpush list:mykey 100 200 300
(integer) 3
127.0.0.1:6379> lrange list:mykey 0 -1
1) "300"
2) "200"
3) "100"

LREM命令

移除列表元素。语法:

LREM key count value

实例:

127.0.0.1:6379> lpush list:key 100 200 200 200 300
(integer) 5
127.0.0.1:6379> lrem list:key 2 200
(integer) 2
127.0.0.1:6379> lrange list:key 0 -1
1) "300"
2) "200"
3) "100"

LSET命令

通过索引设置列表元素的值。语法:

LSET key index value

实例:

127.0.0.1:6379> lpush list:mykey 100 200 300
(integer) 3
127.0.0.1:6379> lset list:mykey 2 400
OK
127.0.0.1:6379> lrange list:mykey 0 -1
1) "300"
2) "200"
3) "400"

LTRIM命令

对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。语法:

LTRIM key start stop

实例:

127.0.0.1:6379> lpush list:mykey 100 200 300 400 500 600
(integer) 6
127.0.0.1:6379> ltrim list:mykey 2 4
OK
127.0.0.1:6379> lrange list:mykey 0 -1
1) "400"
2) "300"
3) "200"

RPOP命令

移除列表的最后一个元素,返回值为移除的元素。语法:

RPOP key

实例:

127.0.0.1:6379> lpush list:mykey 100 200 300
(integer) 3
127.0.0.1:6379> rpop list:mykey
"100"
127.0.0.1:6379> lrange list:mykey 0 -1
1) "300"
2) "200"

RPOPLPUSH命令

移除列表的最后一个元素,并将该元素添加到另一个列表并返回。语法:

RPOPLPUSH source destination

实例:

127.0.0.1:6379> lpush list:key1 100
(integer) 4
127.0.0.1:6379> lpush list:key2 200
(integer) 1
127.0.0.1:6379> rpoplpush list:key1 list:key2
"100"
127.0.0.1:6379> lrange list:key2 0 -1
1) "100"
2) "200"

RPUSH命令

在列表中添加一个或多个值到列表尾部。语法:

RPUSH key value1 [value2]

实例:

127.0.0.1:6379> lpush list:mykey 100
(integer) 1
127.0.0.1:6379> rpush list:mykey 200
(integer) 2
127.0.0.1:6379> lrange list:mykey 0 -1
1) "100"
2) "200"

RPUSHX命令

为已存在的列表添加值。语法:

RPUSHX key value

实例:

127.0.0.1:6379> lpush list:key1 100
(integer) 1
127.0.0.1:6379> rpushx list:key1 200
(integer) 2
127.0.0.1:6379> rpushx list:key2 300
(integer) 0

更多命令请访问 https://redis.io/commands  进行参考。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号