Redis列表命令
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
一个列表最多可以包含
2
3
2
−
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
返回列表中指定区间内的元素,区间以偏移量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命令
Redis Lrem
根据参数COUNT
的值,移除列表中与参数VALUE
相等的元素。
COUNT 的值可以是以下几种:
count>0: 从表头开始向表尾搜索,移除与VALUE
相等的元素,数量为COUNT
。
count<0: 从表尾开始向表头搜索,移除与VALUE
相等的元素,数量为COUNT
的绝对值。
count=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"
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"