Lists特点:元素有序可重复
命令一览:RPUSH、LPUSH、LRANGE、LPOP、RPOP、LLEN、LINDEX 、LSET、LREM、LTRIM、RPOPLPUSH
命令翻译自Redis,点击跳转:You can try redis command by yourself.Come on !
一、RPUSH
1、操作对象:Lists
2、用法:RPUSH key value1 value2 ... valueN
3、时间复杂度:O(1)
4、作用:向指定名为key的List的尾部添加一个或多个String类型的value,如果key不存在,会在执行RPUSH之前追加创建一个没有元素的空List,如果key存在但不是List类型则返回错误
5、返回值:成功返回List的元素个数
举例:
> RPUSH friends "Alice"
(integer) 1
> RPUSH friends "Bob"
(integer) 2
二、LPUSH
1、操作对象:Lists
2、用法:LPUSH key value1 value2 ... valueN
3、时间复杂度:O(1)
4、作用:向指定名为key的List的头部添加一个或多个String类型的value,如果key不存在,会在执行LPUSH之前追加创建一个没有元素的空List,如果key存在但不是List类型则返回错误
5、返回值:成功返回List的元素个数
举例:
> LPUSH friends "Bill"
(integer) 4
三、LRANGE
1、操作对象:Lists
2、用法:LRANGE key start end
3、时间复杂度:O(n)(n表示start到end范围内的长度)
4、作用:根据起始索引到结束索引查询List中对应范围中的元素,0是List中第一个元素的索引,依此类推
5、返回值:指定范围内的一批元素
6、三种情况:
1)start可以从0开始,end为-1表示到List末尾元素,为-2表示到List倒数第二个元素,依次类推
2)end大于List长度,不会有错误,Redis会认为到List末尾元素
3)start超出List长度或者start>end,返回空的List
举例:
> LRANGE friends 0 -1
1) "Sam"
2) "Alice"
3) "Bob"
> LRANGE friends 0 1
1) "Sam"
2) "Alice"
> LRANGE friends 1 2
1) "Alice"
2) "Bob"
> LRANGE friends 0 10
1) "Sam"
2) "Alice"
3) "Bob"
> LRANGE friends 2 1
(empty list or set)
四、LPOP
1、操作对象:Lists
2、用法:LPOP key
3、时间复杂度:O(1)
4、作用:从List的头部弹出元素,并将弹出元素返回,List将不再含有该元素
5、返回值:List中弹出的元素,如果key不存在或者List为空则返回nil
举例:
> LRANGE friends 0 -1
1) "Sam"
2) "Alice"
3) "Bob"
> LPOP friends
"Sam"
> LRANGE friends 0 -1
1) "Alice"
2) "Bob"
五、RPOP
1、操作对象:Lists
2、用法:RPOP key
3、时间复杂度:O(1)
4、作用:从List的尾部弹出元素,并将弹出元素返回,List将不再含有该元素
5、返回值:List中弹出的元素,如果key不存在或者List为空则返回nil
举例:
> LRANGE friends 0 -1
1) "Alice"
2) "Bob"
> RPOP friends
"Bob"
> LRANGE friends 0 -1
1) "Alice"
六、LLEN
1、操作对象:Lists
2、用法:LLEN key
3、时间复杂度:O(1)
4、作用:获取指定List的长度
5、返回值:如果key不存在或者List为空则返回0,如果key对应的value不是List类型则返回错误
举例:
> LLEN friends
(integer) 1
> LLEN connections
(error) WRONGTYPE Operation against a key holding the wrong kind of value
七、LINDEX
1、操作对象:Lists
2、用法:LINDEX key index
3、时间复杂度:O(N)(N表示List的长度)
4、作用:获取List中指定元素,0是第一个元素,依此类推,-1是最后一个元素,-2是倒数第二个,依此类推
5、返回值:如果key保存的value不是List类型返回错误,如果index超出List长度返回空的字符串
6、平均时间复杂是O(N),但是访问第一个或最后一个的时间复杂度是O(1)
举例:
> LPUSH mylist 7 6 5 4
(integer) 8
> LRANGE mylist 0 -1
1) "4"
2) "5"
3) "6"
4) "7"
> LINDEX mylist 3
"7"
八、LSET
1、操作对象:Lists
2、用法:LSET key index value
3、时间复杂度:O(N)(N表示List的长度)
4、作用:替换List指定index的value,0是第一个元素,依此类推,-1是最后一个元素,-2是倒数第二个,依此类推
5、返回值:如果index长度溢出会返回错误
6、平均时间复杂是O(N),但是替换第一个或最后一个的时间复杂度是O(1)
举例:
> LRANGE mylist 0 -1
1) "4"
2) "5"
3) "6"
4) "7"
> LSET mylist 3 8
OK
> LRANGE mylist 0 -1
1) "4"
2) "5"
3) "6"
4) "8"
> LSET mylist 4 2
(error) ERR index out of range
九、LREM
1、操作对象:Lists
2、用法:LREM key count value
3、时间复杂度:O(N)(N表示List的长度)
4、作用:删除List中count个指定的value,count为负数,表示从尾到头删除,count为正数,表示从头到尾删除
5、返回值:如果key不存在,LREM会认为List为空,返回0,如果key存在,返回删除value的个数(个数不大于count的绝对值),其他结果请参考示例
举例:
1)新建有重复元素的List
> LPUSH mylist 1 8 3 7 6 5 4 2 3 3 5 5 6 7 7 6 8 9 8 9 8 9 9
(integer) 23
> LRANGE mylist 0 -1
1) "9"
2) "9"
3) "8"
4) "9"
5) "8"
6) "9"
7) "8"
8) "6"
9) "7"
10) "7"
11) "6"
12) "5"
13) "5"
14) "3"
15) "3"
16) "2"
17) "4"
18) "5"
19) "6"
20) "7"
21) "3"
22) "8"
23) "1"
2)count为正数:从头到尾删除,count取值5,vlaue取值9,实际只有四个9,预期返回4
> LREM mylist 5 9
(integer) 4
> LRANGE mylist 0 -1
1) "8"
2) "8"
3) "8"
4) "6"
5) "7"
6) "7"
7) "6"
8) "5"
9) "5"
10) "3"
11) "3"
12) "2"
13) "4"
14) "5"
15) "6"
16) "7"
17) "3"
18) "8"
19) "1"
3)count为负数:从尾到头删除,count取值-5,vlaue取值7,实际只有三个7,预期返回3
> LREM mylist -5 7
(integer) 3
> LRANGE mylist 0 -1
1) "8"
2) "8"
3) "8"
4) "6"
5) "6"
6) "5"
7) "5"
8) "3"
9) "3"
10) "2"
11) "4"
12) "5"
13) "6"
14) "3"
15) "8"
16) "1"
4)count为负数:从尾到头删除,count取值-2,vlaue取值6,实际有三个6,预期返回2
> LREM mylist -2 6
(integer) 2
> LRANGE mylist 0 -1
1) "8"
2) "8"
3) "8"
4) "6"
5) "5"
6) "5"
7) "3"
8) "3"
9) "2"
10) "4"
11) "5"
12) "3"
13) "8"
14) "1"
5)count为正数:从头到尾删除,count取值-3,vlaue取值8,实际有四个8,预期返回3
> LREM mylist 3 8
(integer) 3
> LRANGE mylist 0 -1
1) "6"
2) "5"
3) "5"
4) "3"
5) "3"
6) "2"
7) "4"
8) "5"
9) "3"
10) "8"
11) "1"
6)value不存在:List元素列表参考5),预期返回0
> LREM mylist 3 9
(integer) 0
7)key不存在:预期返回0
> LREM yourlist 3 9
(integer) 0
8) count为0:删除List中的所有元素,List元素列表参考5),预期返回存在的value个数
> LREM mylist 0 3
(integer) 3
> LRANGE mylist 0 -1
1) "6"
2) "5"
3) "5"
4) "2"
5) "4"
6) "5"
7) "8"
8) "1"
十、LTRIM
1、操作对象:Lists
2、用法:LTRIM key start end
3、时间复杂度:O(N)(N表示List长度减去范围长度)
4、作用:截短List中的元素从start到end,执行此操作后,List中剩余元素包含start,end,start和end之间的元素
5、返回值:状态码 OK
6、三种情况:
1)start可以从0开始,end为-1表示到List末尾元素,为-2表示到List倒数第二个元素,依次类推
2)end大于List长度,不会有错误,Redis会认为到List末尾元素
3)start超出List长度或者start>end,清空List
7、提示:LTRIM与LPUSH / RPUSH经常一起使用
LPUSH mylist
LTRIM mylist 0 99
上面的两个命令将把列表中的元素压入列表,注意列表不会无限制地增长。 例如,在使用Redis存储日志时,这非常有用。 重要的是要注意,当以这种方式使用LTRIM时,它是O(1)运算,因为在通常情况下,列表的尾部仅删除一个元素
举例:
> RPUSH trimlist 1 2 3 4 5 0 9 8 7 6
(integer) 10
> LRANGE trimlist 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "0"
7) "9"
8) "8"
9) "7"
10) "6"
> LTRIM trimlist 3 8
OK
> LRANGE trimlist 0 -1
1) "4"
2) "5"
3) "0"
4) "9"
5) "8"
6) "7"
十一、RPOPLPUSH
1、操作对象:Lists
2、用法:RPOPLPUSH srckey dstkey
3、时间复杂度:O(1)
4、作用:将srckey的尾部元素移动到dstkey的头部并返回该元素,即srckey失去尾部元素,dstkey在头部得到元素
5、返回值:元素值
举例:
> RPUSH srckey 0 1 2 3 4
(integer) 5
> LRANGE dstkey 0 -1
(empty list or set)
> RPOPLPUSH srckey dstkey
"4"
> LRANGE dstkey 0 -1
1) "4"
> LRANGE srckey 0 -1
1) "0"
2) "1"
3) "2"
4) "3"
> RPOPLPUSH srckey dstkey
"3"
> LRANGE dstkey 0 -1
1) "3"
2) "4"
> LRANGE srckey 0 -1
1) "0"
2) "1"
3) "2"