列表(List)
一个列表可以包含一个或多个以上数量的项,每个项按照它们被推入到列表的位置来排列.每个列表项所处的位置决定了这个项的索引(index),索引以 0 为开始,从列表的左端到右端依次 递增,位于列表最左端(表 头)的项的索引为 0 ,而位于列表最右端(表尾)的 项的索引为 N-1 ,其中 N 为列表的长度。
列表包含的项可以出现重复,它们不必是唯一的.
指令
1.从列表的左端推入值
LPUSH key value [value ...]
将一个或以上数量的值依次推入到列表的左端,命令返回新 值被推入之后,列表目前包含的 项数量。复杂度为 O(N) ,其中 N 为被推入值的数量,如果只推入一个 值,那么命令的复杂度为 O(1) 。
2.从列表的右端推入值
RPUSH key value [value ...]
将一个或以上数量的值依次推入到列表的右端,命令返回新 值被推入之后,列表目前包含的 项数量。复杂度为 O(N) ,其中 N 为被推入值的数量,如果只推入一个 值,那么命令的复杂度为 O(1) 。
操作流程图
3.从列表的两端弹出项
命令 | 作用 | 复杂度 |
LPOP KEY | 移除并返回列表最左端的 项 | O(1) |
RPOP KEY | 移除并返回列表最右端的 项。 | O(1) |
4.获取列表的长度
5.获取列表给定索引上的项
6.获取给定索引范围之内的所以项
7.设置指定索引上的列表项
8.在指定位置插入列表项
9.从列表中删除指定的值
LREM key count value
根据参数 count 的值,移除列表中与参数 value 相等的列表项:
• 如果 count > 0 ,那么从表头开始向表尾搜索,移除最多 count 个值为 value 的列表项。
• 如果 count < 0 ,那么从表尾开始向表 头搜索,移除最多 abs(count) 个值为 value 的列表项。
• 如果 count = 0 ,那么移除列表中所有 值为 value 的列表项。
10.修剪列表
LTRIM key start stop
对一个列表进行修剪(trim),让列表只保留指定索引范 围内的列表项,而将不在范围内的其他列表项全部删除。两个索引都可以是正数或者负数。
命令执行成功时返回 OK ,复杂度为 O(N) ,N 为被移除列表项的数量

11.阻塞式弹出操作
命令 | 作用 |
BLPOP key [key ...] timeout | LPOP 命令的阻塞版本; 命令会以从左到右的顺序,访问给定的各个列表,并弹出首个非空列表最左端的项; 如果所有给定列表都为空,那么客户端将被阻塞,直到等待超时,或者有可弹出的项出现为止; 设置 timeout 参数为 0 表示永远阻塞。 |
BRPOP key [key ...] timeout | RPOP 命令的阻塞版本: 命令会以从左到右的顺序,访问给定的各个列表,并弹出首个非空列表最右端的项; 如果所有给定列表都为空,那么客户端将被阻塞,直到等待超时,或者有可弹出的项出现为止; 设置 timeout 参数为 0 表示永远阻塞。 |
BLPOP/BRPOP的先到先服务原则
如果有多个客户端同时因为某个列表而被阻塞,那么当有新值被推入到这个列表时,服务器就会按照先到先服务原则,优先向最早被阻塞的客户端返回新值。