简介
- 一个列表可以包含一个或以上数量的 项(item),每个项按照它们被推入到列表的位置来排列
- 列表包含的项可以出现重复,它们不必是唯一的
- 以有序的方式存储多个可重复的只,功能相当于Java中的队列操作
列表操作
-
LPUSH key value [value …]
将一个或以上数量的值依次推入到列表的左端,命令返回新值被推入之后,列表目前包含的项数量127.0.0.1:6379> lpush list 1 2 3 (integer) 3 复制代码
-
LPOP key
移除并返回列表最右端的项127.0.0.1:6379> lpop list "3" 127.0.0.1:6379> lpop list "2" 复制代码
-
RPUSH key value [value …]
将一个或以上数量的值依次推入到列表的右端,命令返回新 值被推入之后,列表目前包含的 项数量127.0.0.1:6379> rpush list 4 5 6 (integer) 6 复制代码
-
RPOP key
移除并返回列表最左端的项127.0.0.1:6379> rpop list "6" 127.0.0.1:6379> rpop list "5" 127.0.0.1:6379> rpop list "4" 127.0.0.1:6379> rpop list "1" 复制代码
-
LLEN key
返回列表键 key 的长度,也即是,返回列表包含的列表项数量127.0.0.1:6379> llen list (integer) 0 127.0.0.1:6379> lpush list 1 2 3 4 5 6 (integer) 6 复制代码
-
LINDEX key index
返回列表键 key 中,指定索引 index 上的列表项,不会删除列表上原有的值,index索引可以是正数或者负数27.0.0.1:6379> lindex list 2 "4" 127.0.0.1:6379> llen list (integer) 6 复制代码
-
LRANGE key start stop
返回列表键 key 中,从索引 start 至索引 stop 范围内的所有列表项,不会删除列表上原有的值,两个索引参数都可以是正数或者
负数
127.0.0.1:6379> lrange list 1 5 1) "5" 2) "4" 3) "3" 4) "2" 5) "1" 127.0.0.1:6379> llen list (integer) 6
插入和删除操作
-
LSET key index value
将列表键 key 索引index 上的列表项设置为value ,设置成功时命令返回 OK
如果 index 参数超过了列表的索引范围,那么命令返回一个错误127.0.0.1:6379> lrange list 1 5 1) "5" 2) "4" 3) "3" 4) "2" 5) "1" 127.0.0.1:6379> lset list 1 5x OK 127.0.0.1:6379> lset list 100 5x (error) ERR index out of range 127.0.0.1:6379> lrange list 1 5 1) "5x" 2) "4" 3) "3" 4) "2" 5) "1" ``` 复制代码
-
LINSERT key BEFORE|AFTER pivot value
根据命令调用时传递的是 BEFORE 选项还是 AFTER 选项,将值 value 插入到指定列表项 pivot 的之前或者之后。当 pivot 不存在于列表 key 时,不执行任何操作127.0.0.1:6379> linsert list before 4 400 (integer) 7 127.0.0.1:6379> lrange list 1 10 1) "5x" 2) "400" 3) "4" 4) "3" 5) "2" 6) "1" 复制代码
-
LREM key count value
根据参数 count 的值,移除列表中与参数value相等的列表项
• 如果 count > 0 ,那么从表头开始向表尾搜索,移除最多count 个值为 value 的列表项
• 如果 count < 0 ,那么从表尾开始向表头搜索,移除最多abs(count) 个值为 value 的列表项
• 如果 count = 0 ,那么移除列表中所有值为 value 的列表项
命令返回被移除列表项的数量,移除列表中与参数 value 相等的列表项 -
LTRIM key start stop
对一个列表进行修剪(trim),让列表只保留指定索引范围内的列表项,而将不在范围内的其他列表项全部
删除。两个索引都可以是正数或者 负数,命令执行成功时返回 OK
127.0.0.1:6379> lrange list 1 6 1) "5x" 2) "400" 3) "4" 4) "3" 5) "2" 6) "1" 127.0.0.1:6379> ltrim list 1 3 OK 127.0.0.1:6379> lrange list 1 6 1) "400" 2) "4"
阻塞式弹出操作
-
BLPOP key [key …] timeout
命令会以从左到右的顺序,访问给定的各个列表,并弹出首个非空列表最左端的项
如果所有给定列表都为空,那么客户端将被阻塞,直到等待超时,或者有可弹出的项出现为止
设置 timeout 参数为 0 表示永远阻塞 -
BRPOP key [key …] timeout
命令会以从左到右的顺序,访问给定的各个列表,并弹出首个非空列表最右端的项
如果所有给定列表都为空,那么客户端将被阻塞,直到等待超时,或者有可弹出的项出现为止
设置 timeout 参数为 0 表示永远阻塞127.0.0.1:6379> blpop list 0 1) "list" 2) "9" (3.18s) 复制代码
-
BLPOP/BRPOP 的先到先服务原则
如果有多个客户端同时因为某个列表而被阻塞,那么当有新值被推入到这个列表时,服务器会按照先到
先服务(first in first service)原则,优先向最早被阻塞的客户端返回新值