Redis列表命令

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

一个列表最多可以包含 23212^{32} - 1 个元素(超过40亿)。

Redis Blpop命令

Redis Blpop命令移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

语法

127.0.0.1:6379> BLPOP LIST1 LIST2 .. LISTN TIMEOUT

返回值

  • 如果列表为空,返回一个nil和等待时长
  • 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的key,第二个元素是被弹出元素的值

示例

127.0.0.1:6379> BLPOP list1 100
(nil)
(100.05s)

Redis Brpop命令

Redis Brpop命令移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

语法

127.0.0.1:6379> BRPOP LIST1 LIST2 .. LISTN TIMEOUT

返回值

  • 假如在指定时间内没有任何元素被弹出,则返回一个nil和等待时长
  • 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的key,第二个元素是被弹出元素的值

示例

127.0.0.1:6379> BRPOP list1 100
(nil)
(100.06s)

Redis Brpoplpush命令

Redis Brpoplpush命令从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

语法

127.0.0.1:6379> BRPOPLPUSH LIST1 ANOTHER_LIST TIMEOUT

返回值

  • 假如在指定时间内没有任何元素被弹出,则返回一个nil和等待时长
  • 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长

示例

127.0.0.1:6379> BRPOPLPUSH msg reciver 500
"hello world"
(3.38s)

Redis Lindex命令

Redis Lindex命令用于通过索引获取列表中的元素。你也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。

语法

127.0.0.1:6379> LINDEX KEY_NAME INDEX_POSITION

返回值

  • 列表中下标为指定索引值的元素
  • 如果指定索引值不在列表的区间范围内,返回nil

示例

127.0.0.1:6379> LPUSH mylist "World"
(integer) 1
127.0.0.1:6379> LPUSH mylist "Hello"
(integer) 2
127.0.0.1:6379> LINDEX mylist 0
"Hello"
127.0.0.1:6379> LINDEX mylist -1
"World"
127.0.0.1:6379> LINDEX mylist 3
(nil)

Redis Linsert命令

Redis Linsert命令用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作。当列表不存在时,被视为空列表,不执行任何操作。如果key不是列表类型,返回一个错误。

语法

127.0.0.1:6379> LINSERT KEY_NAME BEFORE EXISTING_VALUE NEW_VALUE

返回值

  • 如果命令执行成功,返回插入操作完成之后,列表的长度
  • 如果没有找到指定元素,返回-1
  • 如果key不存在或为空列表,返回0

示例

127.0.0.1:6379> RPUSH mylist "World"
(integer) 2
127.0.0.1:6379> LINSERT mylist BEFORE "World" "There"
(integer) 3
127.0.0.1:6379> LRANGE mylist 0 -1
1) "Hello"
2) "There"
3) "World"

Redis Llen命令

Redis Llen命令用于返回列表的长度。如果列表key不存在,则key被解释为一个空列表,返回0。如果key不是列表类型,返回一个错误。

语法

127.0.0.1:6379> LLEN KEY_NAME

返回值

列表的长度

示例

127.0.0.1:6379> RPUSH list1 "foo"
(integer) 1
127.0.0.1:6379> RPUSH list1 "bar"
(integer) 2
127.0.0.1:6379> LLEN list1
(integer) 2

Redis Lpop命令

Redis Lpop命令用于移除并返回列表的第一个元素。

语法

127.0.0.1:6379> LPOP KEY_NAME

返回值

  • 列表的第一个元素
  • 当列表key不存在时,返回nil

示例

127.0.0.1:6379> RPUSH list1 "foo"
(integer) 1
127.0.0.1:6379> RPUSH list1 "bar"
(integer) 2
127.0.0.1:6379> LPOP list1
"foo"

Redis Lpush命令

Redis Lpush命令将一个或多个值插入到列表头部。如果key不存在,一个空列表会被创建并执行LPUSH操作。当key存在但不是列表类型时,返回一个错误。

语法

127.0.0.1:6379> LPUSH KEY_NAME VALUE1.. VALUEN

返回值

执行LPUSH命令后,列表的长度

示例

127.0.0.1:6379> LPUSH list1 "foo"
(integer) 1
127.0.0.1:6379> LPUSH list1 "bar"
(integer) 2
127.0.0.1:6379> LRANGE list1 0 -1
1) "bar"
2) "foo"

Redis Lpushx命令

Redis Lpushx将一个值插入到已存在的列表头部,列表不存在时操作无效。

语法

127.0.0.1:6379> LPUSHX KEY_NAME VALUE1.. VALUEN

返回值

LPUSHX命令执行之后,列表的长度

示例

127.0.0.1:6379> LPUSH list1 "foo"
(integer) 1
127.0.0.1:6379> LPUSHX list1 "bar"
(integer) 2
127.0.0.1:6379> LPUSHX list2 "bar"
(integer) 0
127.0.0.1:6379> LRANGE list1 0 -1
1) "bar"
2) "foo"

Redis Lrange命令

Redis Lrange返回列表中指定区间内的元素,区间以偏移量STARTEND指定。

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

语法

127.0.0.1:6379> LRANGE KEY_NAME START END

返回值

一个列表,包含指定区间内的元素

示例

127.0.0.1:6379> RPUSH mylist "two"
(integer) 2
127.0.0.1:6379> RPUSH mylist "three"
(integer) 3
127.0.0.1:6379> LRANGE mylist 0 0
1) "one"
127.0.0.1:6379> LRANGE mylist -3 2
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> LRANGE mylist -100 100
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> LRANGE mylist 5 10
(empty list or set)

Redis Lrem命令

Redis Lrem根据参数COUNT的值,移除列表中与参数VALUE相等的元素。

COUNT 的值可以是以下几种:

  • count>0count > 0: 从表头开始向表尾搜索,移除与VALUE相等的元素,数量为COUNT
  • count<0count < 0: 从表尾开始向表头搜索,移除与VALUE相等的元素,数量为COUNT的绝对值。
  • count=0count = 0: 移除表中所有与VALUE相等的值。

语法

127.0.0.1:6379> LREM KEY_NAME COUNT VALUE

返回值

  • 被移除元素的数量
  • 列表不存在时返回0

示例

127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
127.0.0.1:6379> RPUSH mylist "hello"
(integer) 2
127.0.0.1:6379> RPUSH mylist "foo"
(integer) 3
127.0.0.1:6379> RPUSH mylist "hello"
(integer) 4
127.0.0.1:6379> LREM mylist -2 "hello"
(integer) 2

Redis Lset命令

Redis Lset通过索引来设置元素的值。

当索引参数超出范围,或对一个空列表进行 LSET时,返回一个错误。

关于列表下标的更多信息,请参考LINDEX命令。

语法

127.0.0.1:6379> LSET KEY_NAME INDEX VALUE

返回值

操作成功返回ok,否则返回错误信息

示例

127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
127.0.0.1:6379> RPUSH mylist "hello"
(integer) 2
127.0.0.1:6379> RPUSH mylist "foo"
(integer) 3
127.0.0.1:6379> RPUSH mylist "hello"
(integer) 4
127.0.0.1:6379> LSET mylist 0 "bar"
OK
127.0.0.1:6379> LRANGE mylist 0 -1
1: "bar"
2) "hello"
3) "foo"
4) "hello"

Redis Ltrim命令

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

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

语法

127.0.0.1:6379> LTRIM KEY_NAME START STOP

返回值

命令执行成功时,返回ok

示例

127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
127.0.0.1:6379> RPUSH mylist "hello"
(integer) 2
127.0.0.1:6379> RPUSH mylist "foo"
(integer) 3
127.0.0.1:6379> RPUSH mylist "bar"
(integer) 4
127.0.0.1:6379> LTRIM mylist 1 -1
OK
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"
3) "bar"

Redis Rpop命令

Redis Rpop命令用于移除并返回列表的最后一个元素。

语法

127.0.0.1:6379> RPOP KEY_NAME

返回值

  • 列表的最后一个元素
  • 当列表不存在时,返回nil

示例

127.0.0.1:6379> RPUSH mylist "one"
(integer) 1
127.0.0.1:6379> RPUSH mylist "two"
(integer) 2
127.0.0.1:6379> RPUSH mylist "three"
(integer) 3
127.0.0.1:6379> RPOP mylist
"three"
127.0.0.1:6379> LRANGE mylist 0 -1
1) "one"
2) "two"

Redis Rpoplpush命令

Redis Rpoplpush命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。

语法

127.0.0.1:6379> RPOPLPUSH SOURCE_KEY_NAME DESTINATION_KEY_NAME

返回值

被弹出的元素

示例

127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
127.0.0.1:6379> RPUSH mylist "foo"
(integer) 2
127.0.0.1:6379> RPUSH mylist "bar"
(integer) 3
127.0.0.1:6379> RPOPLPUSH mylist myotherlist
"bar"
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"

Redis Rpush命令

Redis Rpush命令用于将一个或多个值插入到列表的尾部(最右边)。

如果列表不存在,一个空列表会被创建并执行RPUSH操作。当列表存在但不是列表类型时,返回一个错误。

语法

127.0.0.1:6379> RPUSH KEY_NAME VALUE1..VALUEN

返回值

执行RPUSH操作后,列表的长度

示例

127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
127.0.0.1:6379> RPUSH mylist "foo"
(integer) 2
127.0.0.1:6379> RPUSH mylist "bar"
(integer) 3
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"
3) "bar"

Redis Rpushx命令

Redis Rpushx命令用于将一个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效。

语法

127.0.0.1:6379> RPUSHX KEY_NAME VALUE1..VALUEN

返回值

执行Rpushx操作后,列表的长度

示例

127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
127.0.0.1:6379> RPUSH mylist "foo"
(integer) 2
127.0.0.1:6379> RPUSHX mylist2 "bar"
(integer) 0
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"

results matching ""

    No results matching ""