Redis系列-数据类型-列表(List)

列表(List)

    一个列表可以包含一个或多个以上数量的项,每个项按照它们被推入到列表的位置来排列.每个列表项所处的位置决定了这个项的索引(index),索引以 0 为开始,从列表的左端到右端依次 递增,位于列表最左端(表 头)的项的索引为 0 ,而位于列表最右端(表尾)的 项的索引为 N-1 ,其中 N 为列表的长度。

    列表包含的项可以出现重复,它们不必是唯一的.

指令

1.从列表的左端推入值

LPUSH key value [value ...]

将一个或以上数量的值依次推入到列表的左端,命令返回新 值被推入之后,列表目前包含的 项数量。复杂度为 O(N) ,其中 N 为被推入值的数量,如果只推入一个 值,那么命令的复杂度为 O(1) 。

Redis系列-数据类型-列表(List)_第1张图片

2.从列表的右端推入值

RPUSH key value [value ...]

将一个或以上数量的值依次推入到列表的右端,命令返回新 值被推入之后,列表目前包含的 项数量。复杂度为 O(N) ,其中 N 为被推入值的数量,如果只推入一个 值,那么命令的复杂度为 O(1) 。


操作流程图

Redis系列-数据类型-列表(List)_第2张图片

3.从列表的两端弹出项

命令 作用 复杂度
LPOP KEY 移除并返回列表最左端的 项 O(1)
RPOP KEY 移除并返回列表最右端的 项。 O(1)


4.获取列表的长度


5.获取列表给定索引上的项

Redis系列-数据类型-列表(List)_第3张图片

6.获取给定索引范围之内的所以项


7.设置指定索引上的列表项

Redis系列-数据类型-列表(List)_第4张图片

8.在指定位置插入列表项

Redis系列-数据类型-列表(List)_第5张图片

9.从列表中删除指定的值

LREM key count value
根据参数 count 的值,移除列表中与参数 value 相等的列表项:
• 如果 count > 0 ,那么从表头开始向表尾搜索,移除最多 count 个值为 value 的列表项。
• 如果 count < 0 ,那么从表尾开始向表 头搜索,移除最多 abs(count) 个值为 value 的列表项。
• 如果 count = 0 ,那么移除列表中所有 值为 value 的列表项。

Redis系列-数据类型-列表(List)_第6张图片

10.修剪列表

LTRIM key start stop
对一个列表进行修剪(trim),让列表只保留指定索引范 围内的列表项,而将不在范围内的其他列表项全部删除。两个索引都可以是正数或者负数。
命令执行成功时返回 OK ,复杂度为 O(N) ,N 为被移除列表项的数量
Redis系列-数据类型-列表(List)_第7张图片

11.阻塞式弹出操作

阻塞弹出命令
命令 作用
BLPOP key [key ...] timeout

LPOP 命令的阻塞版本;

命令会以从左到右的顺序,访问给定的各个列表,并弹出首个非空列表最左端的项;

如果所有给定列表都为空,那么客户端将被阻塞,直到等待超时,或者有可弹出的项出现为止;

设置 timeout 参数为 0 表示永远阻塞。

BRPOP key [key ...] timeout

RPOP 命令的阻塞版本:

命令会以从左到右的顺序,访问给定的各个列表,并弹出首个非空列表最右端的项;

如果所有给定列表都为空,那么客户端将被阻塞,直到等待超时,或者有可弹出的项出现为止;

设置 timeout 参数为 0 表示永远阻塞。

Redis系列-数据类型-列表(List)_第8张图片

BLPOP/BRPOP的先到先服务原则

    如果有多个客户端同时因为某个列表而被阻塞,那么当有新值被推入到这个列表时,服务器就会按照先到先服务原则,优先向最早被阻塞的客户端返回新值。

Redis系列-数据类型-列表(List)_第9张图片



你可能感兴趣的:(Redis,Redis系列)