美文网首页
Redis | List类型

Redis | List类型

作者: 暴走的朝天椒 | 来源:发表于2021-03-15 22:01 被阅读0次
List类型.png

PUSH操作

1、LPUSH key value [value ...]

描述:
将所有指定的值插入到存于 key 的列表的头部。如果 key 不存在,那么在进行 push 操作前会创建一个空列表。 如果 key 对应的值不是一个 list 的话,那么会返回一个错误。

可以使用一个命令把多个元素 push 进入列表,只需在命令末尾加上多个指定的参数。元素是从最左端的到最右端的、一个接一个被插入到 list 的头部。 所以对于这个命令例子 LPUSH mylist a b c,返回的列表是 c 为第一个元素, b 为第二个元素, a 为第三个元素。

2、RPUSH key value [value ...]

描述:
向存于 key 的列表的尾部插入所有指定的值。如果 key 不存在,那么会创建一个空的列表然后再进行 push 操作。 当 key 保存的不是一个列表,那么会返回一个错误。

可以使用一个命令把多个元素打入队列,只需要在命令后面指定多个参数。元素是从左到右一个接一个从列表尾部插入。 比如命令 RPUSH mylist a b c 会返回一个列表,其第一个元素是 a ,第二个元素是 b ,第三个元素是 c。

POP操作

1、LPOP key

移除并且返回 key 对应的 list 左边的第一个元素。

2、RPOP key

移除并返回存于 key 的 list 右边的第一个元素。

RPOPLPUSH操作

1、RPOPLPUSH source destination

描述:
原子性地返回并移除存储在 source 的列表的最后一个元素(列表尾部元素), 并把该元素放入存储在 destination 的列表的第一个元素位置(列表头部)。

例子:
redis> RPUSH mylist "one"
       (integer) 1
redis> RPUSH mylist "two"
       (integer) 2
redis> RPUSH mylist "three"
       (integer) 3
redis> RPOPLPUSH mylist myotherlist
       "three"
redis> LRANGE mylist 0 -1
       1) "one"
       2) "two"
redis> LRANGE myotherlist 0 -1
       1) "three"
redis>

应用场景:
       Redis通常都被用做一个处理各种后台工作或消息任务的消息服务器。 一个简单的队列模式就是:生产者把消息放入一个列表中,等待消息的消费者用 RPOP 命令(用轮询方式), 或者用 BRPOP 命令(如果客户端使用阻塞操作会更好)来得到这个消息。
       然而,因为消息有可能会丢失,所以这种队列并是不安全的。例如,当接收到消息后,出现了网络问题或者消费者端崩溃了, 那么这个消息就丢失了。
       RPOPLPUSH (或者其阻塞版本的 BRPOPLPUSH) 提供了一种方法来避免这个问题:消费者端取到消息的同时把该消息放入一个正在处理中的列表。 当消息被处理了之后,该命令会使用 LREM 命令来移除正在处理中列表中的对应消息。
       另外,可以添加一个客户端来监控这个正在处理中列表,如果有某些消息已经在这个列表中存在很长时间了(即超过一定的处理时限), 那么这个客户端会把这些超时消息重新加入到队列中。

2、BRPOPLPUSH source destination timeout

描述:
BRPOPLPUSH 是 RPOPLPUSH 的阻塞版本。 当 source 包含元素的时候,这个命令表现得跟 RPOPLPUSH 一模一样。 当 source 是空的时候,Redis将会阻塞这个连接,直到另一个客户端 push 元素进入或者达到 timeout 时限。 timeout 为 0 能用于无限期阻塞客户端。

数组

1、LRANGE key start stop

描述:
返回存储在 key 的列表里指定范围内的元素。 start 和 end 偏移量都是基于0的下标,即list的第一个元素下标是0(list的表头),第二个元素下标是1,以此类推。
偏移量也可以是负数,表示偏移量是从list尾部开始计数。 例如, -1 表示列表的最后一个元素,-2 是倒数第二个,以此类推。

2、LINDEX key index

描述:
返回列表里的元素的索引 index 存储在 key 里面。 下标是从0开始索引的,所以 0 是表示第一个元素, 1 表示第二个元素,并以此类推。 负数索引用于指定从列表尾部开始索引的元素。在这种方法下,-1 表示最后一个元素,-2 表示倒数第二个元素,并以此往前推。
当 key 位置的值不是一个列表的时候,会返回一个error。

3、LTRIM key start stop

描述:
       修剪(trim)一个已存在的 list,这样 list 就会只包含指定范围的指定元素。start 和 stop 都是由0开始计数的, 这里的 0 是列表里的第一个元素(表头),1 是第二个元素,以此类推。
       start 和 end 也可以用负数来表示与表尾的偏移量,比如 -1 表示列表里的最后一个元素, -2 表示倒数第二个,等等。
       超过范围的下标并不会产生错误:如果 start 超过列表尾部,或者 start > end,结果会是列表变成空表(即该 key 会被移除)。 如果 end 超过列表尾部,Redis 会将其当作列表的最后一个元素。

例子:
redis> RPUSH mylist "one"
       (integer) 1
redis> RPUSH mylist "two"
       (integer) 2
redis> RPUSH mylist "three"
       (integer) 3
redis> LTRIM mylist 1 -1
       OK
redis> LRANGE mylist 0 -1
       1) "two"
       2) "three"
redis>

4、LSET key index value

设置 index 位置的list元素的值为 value。 更多关于 index 参数的信息,详见 LINDEX。
当index超出范围时会返回一个error。

例子:
redis> RPUSH mylist "one"
       (integer) 1
redis> RPUSH mylist "two"
       (integer) 2
redis> RPUSH mylist "three"
       (integer) 3
redis> LSET mylist 0 "four"
       OK
redis> LSET mylist -2 "five"
       OK
redis> LRANGE mylist 0 -1
       1) "four"
       2) "five"
       3) "three"
redis>

5、LINSERT key BEFORE|AFTER pivot value

描述:
把 value 插入存于 key 的列表中在基准值 pivot 的前面或后面。
当 key 不存在时,这个list会被看作是空list,任何操作都不会发生。
当 key 存在,但保存的不是一个list的时候,会返回error。

例子:
redis> RPUSH mylist "Hello"
       (integer) 1
redis> RPUSH mylist "World"
       (integer) 2
redis> LINSERT mylist BEFORE "World" "There"
       (integer) 3
redis> LRANGE mylist 0 -1
       1) "Hello"
       2) "There"
       3) "World"
redis>

阻塞,单播队列FIFO

1、BLPOP key [key ...] timeout

描述:
BLPOP 是阻塞式列表的弹出原语。 当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。

例子:
redis> DEL list1 list2
       (integer) 0
redis> RPUSH list1 a b c
       (integer) 3
redis> BLPOP list1 list2 0
       1) "list1"
       2) "a"

2、BRPOP key [key ...] timeout

描述:
BRPOP 是一个阻塞的列表弹出原语。 该命令会按照给出的 key 顺序查看 list,并在找到的第一个非空 list 的尾部弹出一个元素。

例子:
redis> DEL list1 list2
       (integer) 0
redis> RPUSH list1 a b c
       (integer) 3
redis> BRPOP list1 list2 0
       1) "list1"
       2) "c"

其他操作

1、LREM key count value

描述:
从存于 key 的列表里移除前 count 次出现的值为 value 的元素。 这个 count 参数通过下面几种方式影响这个操作:
       count > 0: 从头往尾移除值为 value 的元素。
       count < 0: 从尾往头移除值为 value 的元素。
       count = 0: 移除所有值为 value 的元素。
比如, LREM list -2 “hello” 会从存于 list 的列表里移除最后两个出现的 “hello”。
需要注意的是,如果list里没有存在key就会被当作空list处理,所以当 key 不存在的时候,这个命令会返回 0。

例子:
redis> RPUSH mylist "hello"
       (integer) 1
redis> RPUSH mylist "hello"
       (integer) 2
redis> RPUSH mylist "foo"
       (integer) 3
redis> RPUSH mylist "hello"
       (integer) 4
redis> LREM mylist -2 "hello"
       (integer) 2
redis> LRANGE mylist 0 -1
       1) "hello"
       2) "foo"
redis>

2、LLEN key

描述:
返回存储在 key 里的list的长度。 如果 key 不存在,那么就被看作是空list,并且返回长度为 0。 当存储在 key 里的值不是一个list的话,会返回error。

例子:
redis> LPUSH mylist "World"
       (integer) 1
redis> LPUSH mylist "Hello"
       (integer) 2
redis> LLEN mylist
       (integer) 2
redis>

相关文章

网友评论

      本文标题:Redis | List类型

      本文链接:https://www.haomeiwen.com/subject/mlplcltx.html