Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
一个列表最多可以包含 个元素(超过40亿)。
Redis Blpop
命令移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
语法
127.0.0.1:6379> BLPOP LIST1 LIST2 .. LISTN TIMEOUT
返回值
nil
和等待时长示例
127.0.0.1:6379> BLPOP list1 100
(nil)
(100.05s)
Redis Brpop
命令移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
语法
127.0.0.1:6379> BRPOP LIST1 LIST2 .. LISTN TIMEOUT
返回值
nil
和等待时长示例
127.0.0.1:6379> BRPOP list1 100
(nil)
(100.06s)
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
命令用于通过索引获取列表中的元素。你也可以使用负数下标,以-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
命令用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作。当列表不存在时,被视为空列表,不执行任何操作。如果key不是列表类型,返回一个错误。
语法
127.0.0.1:6379> LINSERT KEY_NAME BEFORE EXISTING_VALUE NEW_VALUE
返回值
-1
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
命令用于返回列表的长度。如果列表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
命令用于移除并返回列表的第一个元素。
语法
127.0.0.1:6379> LPOP KEY_NAME
返回值
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
命令将一个或多个值插入到列表头部。如果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
将一个值插入到已存在的列表头部,列表不存在时操作无效。
语法
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
返回列表中指定区间内的元素,区间以偏移量START
和END
指定。
其中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
根据参数COUNT
的值,移除列表中与参数VALUE
相等的元素。
COUNT 的值可以是以下几种:
VALUE
相等的元素,数量为COUNT
。VALUE
相等的元素,数量为COUNT
的绝对值。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
通过索引来设置元素的值。
当索引参数超出范围,或对一个空列表进行 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
对一个列表进行修剪(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
命令用于移除并返回列表的最后一个元素。
语法
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
命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
语法
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
命令用于将一个或多个值插入到列表的尾部(最右边)。
如果列表不存在,一个空列表会被创建并执行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
命令用于将一个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效。
语法
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"