Redis列表命令

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

一个列表最多可以包含 2 3 2 1 2^{32} - 1

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
  • count<0count < 0
  • count=0count = 0
  • 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"
    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
    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"