lpush [key] [value1] [value2] … [valuen]
将一个或多个值插入给定key头部,如果key不存在,会创建再插入,当key存在且不是list类型时,会返回一个错误
Redis 2.4 版本以前只能插入单个值
# 正常情况
127.0.0.1:6379> lpush lpush-key 1 2 3 4 5 6 7
(integer) 7
127.0.0.1:6379> lrange lpush-key 0 -1
1) "7"
2) "6"
3) "5"
4) "4"
5) "3"
6) "2"
7) "1"
# key存在且不是list类型
127.0.0.1:6379> set str-key 1
OK
127.0.0.1:6379> lpush str-key 2 3 4
(error) WRONGTYPE Operation against a key holding the wrong kind of value
lpushx [key] [value]
作用与lpush类似,区别在于插入的key必须存在,不存在时插入操作无效
# 正常情况
127.0.0.1:6379> lrange lpush-key 0 -1
1) "7"
2) "6"
3) "5"
4) "4"
5) "3"
6) "2"
7) "1"
127.0.0.1:6379> lpushx lpush-key 8
(integer) 8
127.0.0.1:6379> lrange lpush-key 0 -1
1) "8"
2) "7"
3) "6"
4) "5"
5) "4"
6) "3"
7) "2"
8) "1"
# key不存在
127.0.0.1:6379> exists lpush-key2
(integer) 0
127.0.0.1:6379> lpushx lpush-key2 1
(integer) 0
127.0.0.1:6379> lrange lpush-key2 0 -1
(empty list or set)
rpush [key] [value1] [value2] … [valuen]
作用与lpush类似,区别在于是从尾部插入
127.0.0.1:6379> rpush rpush-key 1 2 3 4 5 6 7
(integer) 7
127.0.0.1:6379> lrange rpush-key 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
rpushx [key] [value]
作用与lpushx类似,区别在于是从尾部插入
127.0.0.1:6379> lrange rpush-key 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
127.0.0.1:6379> rpushx rpush-key 8
(integer) 8
127.0.0.1:6379> lrange rpush-key 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
# key不存在
127.0.0.1:6379> exists rpush-key2
(integer) 0
127.0.0.1:6379> rpushx rpush-key2 1
(integer) 0
127.0.0.1:6379> lrange rpush-key2 0 -1
(empty list or set)
llen [key]
获取列表长度
127.0.0.1:6379> lpush llen-key 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange llen-key 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> llen llen-key
(integer) 5
lpop [key]
移除并返回列表的第一个元素
127.0.0.1:6379> lpush lpop-key 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange lpop-key 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> lpop lpop-key
"5"
127.0.0.1:6379> lrange lpop-key 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
rpop [key]
移除并返回列表的最后一个元素
127.0.0.1:6379> lpush rpop-key 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange rpop-key 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> rpop rpop-key
"1"
127.0.0.1:6379> lrange rpop-key 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
lindex [key] [index]
通过索引获取列表中的元素,索引从0开始,可以是负数,-1表示最后一个元素,以此类推
如果索引超出列表范围,则返回nil
127.0.0.1:6379> lpush lindex-key 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange lindex-key 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> lindex lindex-key 0
"5"
127.0.0.1:6379> lindex lindex-key -1
"1"
127.0.0.1:6379> lindex lindex-key -2
"2"
127.0.0.1:6379> lindex lindex-key 10
(nil)
lrange [key] [start] [stop]
获取给定key指定范围内的元素,索引从0开始,可以是负数,-1表示最后一个元素,以此类推
获取全部元素,start设定为0,stop设定为-1即可
所在范围内没有元素时返回
(empty list or set)
127.0.0.1:6379> lpush lrange-key 1 2 3 4 5 6 7
(integer) 7
127.0.0.1:6379> lrange lrange-key 0 -1
1) "7"
2) "6"
3) "5"
4) "4"
5) "3"
6) "2"
7) "1"
127.0.0.1:6379> lrange lrange-key 1 3
1) "6"
2) "5"
3) "4"
127.0.0.1:6379> lrange lrange-key -6 1
1) "6"
127.0.0.1:6379> lrange lrange-key 0 10
1) "7"
2) "6"
3) "5"
4) "4"
5) "3"
6) "2"
7) "1"
127.0.0.1:6379> lrange lrange-key 8 10
(empty list or set)
lrem [key] [count] [value]
根据参数count的值,移除列表中与value相等的元素
count>0:从表头开始搜索移除,数量为count
count<0:从表尾开始搜索移除,数量为count绝对值
count=0:移除列表中所有与value值相等的元素
127.0.0.1:6379> lpush lrem-key 1 3 4 1 4 6 1 9 1 0 1 1 7
(integer) 13
127.0.0.1:6379> lrange lrem-key 0 -1
1) "7"
2) "1"
3) "1"
4) "0"
5) "1"
6) "9"
7) "1"
8) "6"
9) "4"
10) "1"
11) "4"
12) "3"
13) "1"
127.0.0.1:6379> lrem lrem-key 2 1
(integer) 2
127.0.0.1:6379> lrange lrem-key 0 -1
1) "7"
2) "0"
3) "1"
4) "9"
5) "1"
6) "6"
7) "4"
8) "1"
9) "4"
10) "3"
11) "1"
127.0.0.1:6379> lrem lrem-key -2 1
(integer) 2
127.0.0.1:6379> lrange lrem-key 0 -1
1) "7"
2) "0"
3) "1"
4) "9"
5) "1"
6) "6"
7) "4"
8) "4"
9) "3"
127.0.0.1:6379> lrem lrem-key 0 1
(integer) 2
127.0.0.1:6379> lrange lrem-key 0 -1
1) "7"
2) "0"
3) "9"
4) "6"
5) "4"
6) "4"
7) "3"
lset [key] [index] [value]
为指定key设置指定索引的值,如果索引超出范围或者key不存在则返回一个错误
# 正常情况
127.0.0.1:6379> lpush lset-key 1 2 3
(integer) 3
127.0.0.1:6379> lrange lset-key 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lset lset-key 0 hello
OK
127.0.0.1:6379> lrange lset-key 0 -1
1) "hello"
2) "2"
3) "1"
# 索引超出范围
127.0.0.1:6379> lset lset-key 5 redis
(error) ERR index out of range
# key不存在
127.0.0.1:6379> exists lset-key2
(integer) 0
127.0.0.1:6379> lset lset-key2 0 hello
(error) ERR no such key
linsert [key] [before|after] pivot value
在给定key列表中指定元素前面|后面插入元素value
当列表中指定元素存在多个时,处理标准是第一个相同元素
指定元素不存在于列表时,不执行任何操作
列表不存在或列表为空时,不执行任何操作
给定key不是列表时,返回一个错误
执行成功返回列表的长度,如果没有找到指定的元素则返回-1,如果key不存在或是空列表则返回0
# 正常情况
127.0.0.1:6379> lpush linsert-key a b c d e a b c a
(integer) 9
127.0.0.1:6379> lrange linsert-key 0 -1
1) "a"
2) "c"
3) "b"
4) "a"
5) "e"
6) "d"
7) "c"
8) "b"
9) "a"
127.0.0.1:6379> linsert linsert-key a f
(error) ERR wrong number of arguments for 'linsert' command
127.0.0.1:6379> linsert linsert-key before a f
(integer) 10
127.0.0.1:6379> lrange linsert-key 0 -1
1) "f"
2) "a"
3) "c"
4) "b"
5) "a"
6) "e"
7) "d"
8) "c"
9) "b"
10) "a"
127.0.0.1:6379> linsert linsert-key after a f
(integer) 11
127.0.0.1:6379> lrange linsert-key 0 -1
1) "f"
2) "a"
3) "f"
4) "c"
5) "b"
6) "a"
7) "e"
8) "d"
9) "c"
10) "b"
11) "a"
# 没有相同元素
127.0.0.1:6379> linsert linsert-key before g f
(integer) -1
127.0.0.1:6379> linsert linsert-key after g f
(integer) -1
# key不存在
127.0.0.1:6379> exists linsert-key2
(integer) 0
127.0.0.1:6379> linsert linsert-key2 before a f
(integer) 0
127.0.0.1:6379> linsert linsert-key2 after a f
(integer) 0
# 列表为空
127.0.0.1:6379> ltrim linsert-key 15 20
OK
127.0.0.1:6379> lrange linsert-key 0 -1
(empty list or set)
127.0.0.1:6379> linsert linsert-key after g f
(integer) 0
# 给定key不是列表
127.0.0.1:6379> sadd linsert-key4 1
(integer) 1
127.0.0.1:6379> type linsert-key4
set
127.0.0.1:6379> linsert linsert-key4 after g f
(error) WRONGTYPE Operation against a key holding the wrong kind of value
ltrim [key] [start] [stop]
对列表进行修剪,只保留索引范围内的元素,其余元素都会被清除,索引从0开始,可以是负数,-1表示最后一个元素,以此类推,如果范围内没有元素,则会清除所有元素.
127.0.0.1:6379> lpush ltrim-key 1 2 3 4 5 6 7
(integer) 7
127.0.0.1:6379> lrange ltrim-key 0 -1
1) "7"
2) "6"
3) "5"
4) "4"
5) "3"
6) "2"
7) "1"
127.0.0.1:6379> ltrim ltrim-key 1 5
OK
127.0.0.1:6379> lrange ltrim-key 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
127.0.0.1:6379> ltrim ltrim-key 5 8
OK
127.0.0.1:6379> lrange ltrim-key 0 -1
(empty list or set)
127.0.0.1:6379> lpush ltrim-key2 1 2 3 4 5 6 7
(integer) 7
127.0.0.1:6379> ltrim ltrim-key2 -5 5
OK
127.0.0.1:6379> lrange ltrim-key2 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
rpoplpush [source-key] [destination-key]
移除源key的最后一个元素,将元素添加到目标key并返回
127.0.0.1:6379> lpush rpoplpush-key 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange rpoplpush-key 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> exists rpoplpush-key2
(integer) 0
127.0.0.1:6379> rpoplpush rpoplpush-key rpoplpush-key2
"1"
127.0.0.1:6379> lrange rpoplpush-key 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
127.0.0.1:6379> lrange rpoplpush-key2 0 -1
1) "1"
blpop [key1] [key2] … [keyn] [timeout]
移除并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素
如果列表为空,返回一个 nil 。 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。
127.0.0.1:6379> lpush blpop-key 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lpush blpop-key2 a b c d e
(integer) 5
127.0.0.1:6379> lrange blpop-key 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> lrange blpop-key2 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"
127.0.0.1:6379> blpop blpop-key blpop-key2 20
1) "blpop-key"
2) "5"
127.0.0.1:6379> blpop blpop-key2 blpop-key 20
1) "blpop-key2"
2) "e"
127.0.0.1:6379> lrange blpop-key 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> lrange blpop-key2 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> blpop blpop-key2 20
1) "blpop-key2"
2) "d"
# 列表没有元素阻塞了列表,过了超时时间后返回nil
127.0.0.1:6379> blpop blpop-key3 20
(nil)
(20.09s)
# 列表没有元素阻塞了列表,用另外一个连接lpush元素后弹出了第一个元素
127.0.0.1:6379> blpop blpop-key3 20
1) "blpop-key3"
2) "11"
(9.03s)
brpop [key1] [key2] … [keyn] [timeout]
作用与blpop类似,区别在于是弹出最后一个元素
127.0.0.1:6379> lpush brpop-key 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange brpop-key 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> brpop brpop-key 20
1) "brpop-key"
2) "1"
127.0.0.1:6379> lrange brpop-key 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
brpoplpush [source-key] [destination-key] [timeout]
127.0.0.1:6379> lpush brpoplpush-key 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange brpoplpush-key 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> brpoplpush brpoplpush-key brpoplpush-key2 20
"1"
127.0.0.1:6379> lrange brpoplpush-key 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
127.0.0.1:6379> lrange brpoplpush-key2 0 -1
1) "1"