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下面列出了列表相关的基本命令。
移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。语法:
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 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 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 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 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 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 key实例:
127.0.0.1:6379> lpush list:mykey 100 200 300
(integer) 3
127.0.0.1:6379> lpop list:mykey
"300"将一个或多个值插入到列表头部。语法:
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 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 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 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 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"对一个列表进行修剪(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 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 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 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 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 进行参考。