列表(list)类型是用来存储多个有序的字符串,在redis中可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等操作(具体查看下面操作示意图),一个列表最多可以包含 232 - 1 个元素。列表是比较灵活的数据结构,在实际开发中有很多应用场景。
可以实现的功能
lpush
+lpop
栈lpush
+rpop
队列lpush
+brpop
消息队列lpush
+ltrim
有限集合
操作示意图
常用命令
命令 | 说明 | 时间复杂度 |
---|---|---|
lpush key value [value …] | 将一个或多个值插入到列表头部(最左边)。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误 | O(1) |
rpush key value [value …] | 将一个或多个值插入到列表尾部(最右边)。 如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误 | O(1) |
lpop key | 移除并返回列表的第一个元素 | O(1) |
rpop key | 移除并返回存于 key 的 list 的最后一个元素 | O(1) |
llen key | 返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误 | O(1) |
lindex key index | 通过索引获取列表中的元素。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 如果指定索引值不在列表的区间范围内,返回 nil | O(N) |
lrem key count value | 从存于 key 的列表里移除前 count 次出现的值为 value 的元素。 这个 count 参数通过下面几种方式影响这个操作: 1、count > 0: 从头往尾移除值为 value 的元素; 2、count < 0: 从尾往头移除值为 value 的元素; 3、count = 0: 移除所有值为 value 的元素; 返回被移除元素的数量。 列表不存在时返回 0 | O(N) |
brpop key [key …] timeout | 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 | O(1) |
blpop key [key …] timeout | 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 | O(1) |
ltrim key start stop | 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 | O(N) |
lrange key start stop | 返回存储在 key 的列表里指定范围内的元素。 start 和 end 偏移量都是基于0的下标,即list的第一个元素下标是0(list的表头),第二个元素下标是1,以此类推。 偏移量也可以是负数,表示偏移量是从list尾部开始计数。 例如, -1 表示列表的最后一个元素,-2 是倒数第二个,以此类推。 | O(S+N) |