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 进行参考。