Redis列表

175 阅读5分钟

LPUSH

将一个或多个值 value 插入到列表 key 的表头

如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性地执行 LPUSH mylist aLPUSH mylist bLPUSH mylist c 三个命令。

如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。

key 存在但不是列表类型时,返回一个错误。

127.0.0.1:6379> lpush languages python
(integer) 1
127.0.0.1:6379> lpush languages python	 # 列表允许重复元素
(integer) 2
127.0.0.1:6379> lrange languages 0 -1
1) "python"
2) "python"
127.0.0.1:6379> lpush mylist a b c d
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "d"
2) "c"
3) "b"
4) "a"

LPUSHX

将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表。

127.0.0.1:6379> llen greep
(integer) 0
127.0.0.1:6379> lpushx greet "hello"
(integer) 0
127.0.0.1:6379> lpush greet "hello"
(integer) 1
127.0.0.1:6379> lpushx greet "goof morning"
(integer) 2
127.0.0.1:6379> lrange greet 0 -1
1) "goof morning"
2) "hello"

RPUSH

将一个或多个值 value 插入到列表 key 的表尾(最右边)。

如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令 RPUSH mylist aRPUSH mylist bRPUSH mylist c

如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。

key 存在但不是列表类型时,返回一个错误。

127.0.0.1:6379> rpush languages c
(integer) 3
127.0.0.1:6379> lrange languages 0 -1
1) "python"
2) "python"
3) "c"
127.0.0.1:6379> rpush languages c
(integer) 4
127.0.0.1:6379> lrange languages 0 -1
1) "python"
2) "python"
3) "c"
4) "c"

RPUSHX

将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表。

LPOP

127.0.0.1:6379> llen course
(integer) 0
127.0.0.1:6379> rpush course algorithm001
(integer) 1
127.0.0.1:6379> rpush course c++101
(integer) 2
127.0.0.1:6379> lrange course 0 -1
1) "algorithm001"
2) "c++101"
127.0.0.1:6379> lpop course
"algorithm001"
127.0.0.1:6379> lrange course 0 -1
1) "c++101"

RPOP

移除并返回列表 key 的尾元素。

RPOPLPUSH

  • 将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。
  • source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。

LREM

根据参数 count 的值,移除列表中与参数 value 相等的元素。

count 的值可以是以下几种:

  • count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count
  • count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
  • count = 0 : 移除表中所有与 value 相等的值。
127.0.0.1:6379> lpush greet "morning"
(integer) 3
127.0.0.1:6379> lpush greet "hello"
(integer) 4
127.0.0.1:6379> lpush greet "morning"
(integer) 5
127.0.0.1:6379> lpush greet "hello"
(integer) 6
127.0.0.1:6379> lpush greet "morning"
(integer) 7
127.0.0.1:6379> lrange greet 0 -1
1) "morning"
2) "hello"
3) "morning"
4) "hello"
5) "morning"
6) "goof morning"
7) "hello"
127.0.0.1:6379> lrem greet 2 morning
(integer) 2
127.0.0.1:6379> lrange greet 0 -1
1) "hello"
2) "hello"
3) "morning"
4) "goof morning"
5) "hello"

LLEN

返回列表 key 的长度。

如果 key 不存在,则 key 被解释为一个空列表,返回 0 .

如果 key 不是列表类型,返回一个错误。

127.0.0.1:6379> lrange greet 0 -1
1) "hello"
2) "hello"
3) "morning"
4) "goof morning"
5) "hello"
127.0.0.1:6379> llen greet
(integer) 5

LINDEX

返回列表 key 中,下标为 index 的元素。

下标(index)参数 startstop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

如果 key 不是列表类型,返回一个错误。

127.0.0.1:6379> lrange greet 0 -1
1) "hello"
2) "hello"
3) "morning"
4) "goof morning"
5) "hello"
127.0.0.1:6379> llen greet
(integer) 5
127.0.0.1:6379> lindex greet 0
"hello"
127.0.0.1:6379> lindex greet 1
"hello"
127.0.0.1:6379> lindex greet 2
"morning"

LINSERT

将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。

pivot 不存在于列表 key 时,不执行任何操作。

key 不存在时, key 被视为空列表,不执行任何操作。

如果 key 不是列表类型,返回一个错误。

127.0.0.1:6379> lrange mylist 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> linsert mylist before b nihao
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "d"
2) "c"
3) "nihao"
4) "b"
5) "a"
127.0.0.1:6379> linsert mylist after b hello
(integer) 6
127.0.0.1:6379> lrange mylist 0 -1
1) "d"
2) "c"
3) "nihao"
4) "b"
5) "hello"
6) "a"

LSET

将列表 key 下标为 index 的元素的值设置为 value

index 参数超出范围,或对一个空列表( key 不存在)进行 LSET 时,返回一个错误。

127.0.0.1:6379> lrange mylist 0 -1
1) "d"
2) "c"
3) "nihao"
4) "b"
5) "hello"
6) "a"
127.0.0.1:6379> lset mylist 0 h
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "h"
2) "c"
3) "nihao"
4) "b"
5) "hello"
6) "a"

LRANGE

返回列表 key 中指定区间内的元素,区间以偏移量 startstop 指定。

下标(index)参数 startstop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

LTRIM

对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

举个例子,执行命令 LTRIM list 0 2 ,表示只保留列表 list 的前三个元素,其余元素全部删除。

下标(index)参数 startstop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

key 不是列表类型时,返回一个错误。

127.0.0.1:6379> lrange mylist 0 -1
1) "h"
2) "c"
3) "nihao"
4) "b"
5) "hello"
6) "a"
127.0.0.1:6379> ltrim mylist 0 4
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "h"
2) "c"
3) "nihao"
4) "b"
5) "hello"

BLPOP

BRPOP

BRPOPLPUSH