Redis 列表处理

 

刚开始学Redis,听说用的最多的就是这个列表操作了。

一个列表可以处理2^32 - 1个元素,虽然都是简单的字符串类型。

Redis的列表究竟有多强大,学习学习就知道了。

1、BLPOP 命令


用于移出获取列表首个元素(后进先出),如果列表为空会阻塞列表直到等待超时或发现有元素可弹出为止。

跟LPOP对应,可以同时操作多个列表,使用空格隔开。

127.0.0.1:6379> BLPOP KEY [key ...] TIMEOUT

例如,

127.0.0.1:6379> LPUSH LIST 1
(integer) 1
127.0.0.1:6379> LPUSH LIST 2
(integer) 2
127.0.0.1:6379> LPUSH LIST 3
(integer) 3
127.0.0.1:6379> LPUSH LIST 4
(integer) 4
127.0.0.1:6379> LPUSH LIST 5
(integer) 5
127.0.0.1:6379> LPUSH LIST 6
(integer) 6
127.0.0.1:6379> BLPOP LIST 1
1) "LIST"
2) "6"
127.0.0.1:6379> BLPOP LIST 1
1) "LIST"
2) "5"
127.0.0.1:6379> BLPOP LIST 1
1) "LIST"
2) "4"
127.0.0.1:6379> BLPOP LIST 1
1) "LIST"
2) "3"
127.0.0.1:6379> BLPOP LIST 1
1) "LIST"
2) "2"
127.0.0.1:6379> BLPOP LIST 1
1) "LIST"
2) "1"
127.0.0.1:6379> BLPOP LIST 1
(nil)
(1.00s)

2、BRPOP 命令


用于移出获取列表末个元素(先进先出),如果列表为空会阻塞列表直到等待超时或发现有元素可弹出为止。

跟RPOP对应,可以同时操作多个列表,使用空格隔开。

127.0.0.1:6379> BRPOP KEY [key ...] TIMEOUT

例如,

127.0.0.1:6379> LPUSH LIST 1
(integer) 1
127.0.0.1:6379> LPUSH LIST 2
(integer) 2
127.0.0.1:6379> LPUSH LIST 3
(integer) 3
127.0.0.1:6379> LPUSH LIST 4
(integer) 4
127.0.0.1:6379> LPUSH LIST 5
(integer) 5
127.0.0.1:6379> LPUSH LIST 6
(integer) 6
127.0.0.1:6379> BRPOP LIST 1
1) "LIST"
2) "1"
127.0.0.1:6379> BRPOP LIST 1
1) "LIST"
2) "2"
127.0.0.1:6379> BRPOP LIST 1
1) "LIST"
2) "3"
127.0.0.1:6379> BRPOP LIST 1
1) "LIST"
2) "4"
127.0.0.1:6379> BRPOP LIST 1
1) "LIST"
2) "5"
127.0.0.1:6379> BRPOP LIST 1
1) "LIST"
2) "6"
127.0.0.1:6379> BRPOP LIST 1
(nil)
(1.11s)

3、BRPOPLPUSH 命令


用于移出获取列表末个元素(先进先出),将获取的元素放入另外一个列表中。

如果列表为空会阻塞列表直到等待超时或发现有元素可弹出为止。

可以拆分为:BRPOP -> LPUSH操作。

127.0.0.1:6379> BRPOPLPUSH SOURCE DESTINATION TIMEOUT 

例如,

127.0.0.1:6379> LPUSH LIST1 1
(integer) 1
127.0.0.1:6379> LPUSH LIST1 2
(integer) 2
127.0.0.1:6379> LPUSH LIST1 3
(integer) 3
127.0.0.1:6379> LPUSH LIST1 4
(integer) 4
127.0.0.1:6379> LPUSH LIST1 5
(integer) 5
127.0.0.1:6379> BRPOPLPUSH LIST1 LIST2 10
"1"
127.0.0.1:6379> BRPOPLPUSH LIST1 LIST2 10
"2"
127.0.0.1:6379> BRPOPLPUSH LIST1 LIST2 10
"3"
127.0.0.1:6379> BRPOPLPUSH LIST1 LIST2 10
"4"
127.0.0.1:6379> BRPOPLPUSH LIST1 LIST2 10
"5"
127.0.0.1:6379> BRPOPLPUSH LIST1 LIST2 10
(nil)
(10.10s)

4、LINDEX 命令


通过索引来获取列表中元素的值(后进先出、先进后出)。INDEX可以是正数也可以是负数。

-1表示最后一个元素,-2表示倒数第二个元素,以此类推。

如果给定的索引位置不存在,则返回nil。

127.0.0.1:6379> LINDEX KEY INDEX 

例如,

127.0.0.1:6379> LPUSH LIST 1
(integer) 1
127.0.0.1:6379> LPUSH LIST 2
(integer) 2
127.0.0.1:6379> LPUSH LIST 3
(integer) 3
127.0.0.1:6379> LPUSH LIST 4
(integer) 4
127.0.0.1:6379> LPUSH LIST 5
(integer) 5
127.0.0.1:6379> LPUSH LIST 6
(integer) 6
127.0.0.1:6379> LINDEX LIST 1
"5"
127.0.0.1:6379> LINDEX LIST 0
"6"
127.0.0.1:6379> LINDEX LIST -1
"1"
127.0.0.1:6379> LINDEX LIST 10
(nil)

5、LINSERT 命令


用于在指定的列表中相关元素的前后插入新的元素。

当指定的元素不存在时,不做任何操作;当该列表不存在时,不做任何操作;

使用此命令注意,查找元素的顺序是逆序的,也就是从队尾开始找起。

127.0.0.1:6379> LINSERT LIST BEFORE|AFTER PIVOT VALUE

例如,

127.0.0.1:6379> LRANGE LIST 0 -1
1) "2"
2) "3"
3) "4"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> LINSERT LIST BEFORE 2 5
(integer) 7
127.0.0.1:6379> LRANGE LIST 0 -1
1) "5"
2) "2"
3) "3"
4) "4"
5) "3"
6) "2"
7) "1"

6、LLEN 命令


用于返回一个列表的长度,如果列表不存在或者为空,则返回0,如果不是列表类型,则返回错误说明。

127.0.0.1:6379> LLEN KEY

例如,

127.0.0.1:6379> LLEN LIST
(integer) 7
127.0.0.1:6379> LLEN LIST1
(integer) 0
127.0.0.1:6379> SET KEY 1
OK
127.0.0.1:6379> LLEN KEY
(error) WRONGTYPE Operation against a key holding the wrong kind of value

7、LPOP 命令


用于移出获取列表首个元素(后进先出)。

127.0.0.1:6379> LPOP KEY 

例如,

127.0.0.1:6379> LPOP LIST
"5"
127.0.0.1:6379> LPOP LIST
"2"
127.0.0.1:6379> LPOP LIST
"3"
127.0.0.1:6379> LPOP LIST
"4"
127.0.0.1:6379> LPOP LIST
"3"
127.0.0.1:6379> LPOP LIST
"2"
127.0.0.1:6379> LPOP LIST
"1"
127.0.0.1:6379> LPOP LIST
(nil)

8、LPUSH 命令


用于将一个或多个值插入指定的列表中。如果指定的列表不存在,则创建一个新的列表。

如果指定的KEY不是一个列表类型时,则返回一个错误说明。

127.0.0.1:6379> LPUSH KEY VALUE [value ...]

例如,

127.0.0.1:6379> LPUSH KEY 1 2 3 4 5
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> LPUSH LIST 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LRANGE LIST 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"

9、LPUSHX 命令


用于将一个值插入指定的列表中 。

如果指定的列表不存在,则不进行任何操作。

127.0.0.1:6379> LPUSHX KEY VALUE 

例如,

127.0.0.1:6379> lpush LIST 1
(integer) 1
127.0.0.1:6379> lpush LIST2 1
(integer) 1
127.0.0.1:6379> lpushX LIST3 1
(integer) 0
127.0.0.1:6379> lpushX LIST3 1
(integer) 0

10、LRANGE 命令


用于返回列表中指定区间内的元素值。区间通过START与STOP指定。

启动0表示列表的第一个元素,以此类推。-1表示最后一个元素,-2表示倒数第二个元素。

127.0.0.1:6379> LRANGE KEY START STOP 

例如,

127.0.0.1:6379> LRANGE LIST 0 -1
1) "1"
127.0.0.1:6379> lpush LIST 2
(integer) 2
127.0.0.1:6379> lpush LIST 3
(integer) 3
127.0.0.1:6379> lpush LIST 4
(integer) 4
127.0.0.1:6379> LRANGE LIST 0 -1
1) "4"
2) "3"
3) "2"
4) "1"

11、LREM 命令


用于删除列表中与指定元素相同的元素,数量由COUNT指定。

127.0.0.1:6379> LREM KEY COUNT VALUE 

例如,当COUNT为正数时:从队头向队尾的方向查找。

127.0.0.1:6379> LPUSH LIST 1 2 3 1 4 1 5
(integer) 7
127.0.0.1:6379> LRANGE LIST 0 -1
1) "5"
2) "1"
3) "4"
4) "1"
5) "3"
6) "2"
7) "1"
127.0.0.1:6379> LREM LIST 1 1
(integer) 1
127.0.0.1:6379> LRANGE LIST 0 -1
1) "5"
2) "4"
3) "1"
4) "3"
5) "2"
6) "1"

例如,当COUNT为负数时:从队尾向队头查找。

127.0.0.1:6379> LRANGE LIST 0 -1
1) "5"
2) "4"
3) "1"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> LREM LIST -1 1
(integer) 1
127.0.0.1:6379> LRANGE LIST 0 -1
1) "5"
2) "4"
3) "1"
4) "3"
5) "2"
127.0.0.1:6379> 

12、LSET 命令


用于通过索引,设置列表中相应位置上的元素值。

如果索引超出范围或者列表为空时,则返回一个错误说明。

127.0.0.1:6379> LSET KEY INDEX VALUE 

例如,

127.0.0.1:6379> LRANGE LIST 0 -1
1) "5"
2) "4"
3) "1"
4) "3"
5) "2"
127.0.0.1:6379> LSET LIST 1 0
OK
127.0.0.1:6379> LRANGE LIST 0 -1
1) "5"
2) "0"
3) "1"
4) "3"
5) "2"
127.0.0.1:6379> LSET LIST 10 0
(error) ERR index out of range

13、LTRIM 命令


用于对一个列表进行修剪(TRIM)操作,列表中只保留指定区间内的元素,不在区间内的元素都被删除。

区间通过START与STOP进行指定,0表示第一个元素,-1表示最后一个元素。

127.0.0.1:6379> LTRIM KEY START STOP 

例如,

127.0.0.1:6379> LRANGE LIST 0 -1
1) "5"
2) "0"
3) "1"
4) "3"
5) "2"
127.0.0.1:6379> LTRIM LIST 1 -2
OK
127.0.0.1:6379> LRANGE LIST 0 -1
1) "0"
2) "1"
3) "3"
127.0.0.1:6379> 

14、RPOP 命令


用于移出并返回列表的最后一个元素。如果为空,则返回nil。

127.0.0.1:6379> RPOP KEY

例如,

127.0.0.1:6379> LRANGE LIST 0 -1
1) "0"
2) "1"
3) "3"
127.0.0.1:6379> RPOP LIST
"3"
127.0.0.1:6379> RPOP LIST
"1"
127.0.0.1:6379> RPOP LIST
"0"
127.0.0.1:6379> RPOP LIST
(nil)

15、RPOPLPUSH 命令


用于移出获取队列表头元素(先进先出),将获取的元素放入另外一个列表中。

可以拆分为:RPOP -> LPUSH操作。

127.0.0.1:6379> RPOPLPUSH SOURCE DESTINATION 

例如,

127.0.0.1:6379> LPUSH LIST 1 2 3 4 5 6 7 8 9 10
(integer) 10
127.0.0.1:6379> Lrange LIST 0 -1
 1) "10"
 2) "9"
 3) "8"
 4) "7"
 5) "6"
 6) "5"
 7) "4"
 8) "3"
 9) "2"
10) "1"
127.0.0.1:6379> RPOPLPUSH LIST LIST1
"1"
127.0.0.1:6379> RPOPLPUSH LIST LIST1
"2"
127.0.0.1:6379> RPOPLPUSH LIST LIST1
"3"
127.0.0.1:6379> RPOPLPUSH LIST LIST1
"4"
127.0.0.1:6379> RPOPLPUSH LIST LIST1
"5"

16、RPUSH 命令


用于将一个或多个值插入指定列表的尾部。如果指定的列表不存在,则创建一个新的列表。

如果指定的KEY不是一个列表类型时,则返回一个错误说明。

127.0.0.1:6379> RPUSH LIST VALUE [value ...]

例如,

127.0.0.1:6379> RPUSH LIST 5 4 3 2 1
(integer) 10
127.0.0.1:6379> LRANGE LIST 0 -1
 1) "10"
 2) "9"
 3) "8"
 4) "7"
 5) "6"
 6) "5"
 7) "4"
 8) "3"
 9) "2"
10) "1"

17、RPUSHX 命令


用于将一个值插入指定列表的尾部,如果指定的列表不存在,则不进行任何操作。

127.0.0.1:6379> RPUSHX KEY VALUE 

例如,

127.0.0.1:6379> RPUSHX LIST 11
(integer) 11
127.0.0.1:6379> LRANGE LIST 0 -1
 1) "10"
 2) "9"
 3) "8"
 4) "7"
 5) "6"
 6) "5"
 7) "4"
 8) "3"
 9) "2"
10) "1"
11) "11"
127.0.0.1:6379> RPUSHX LIST2 11
(integer) 0
127.0.0.1:6379> RPUSHX LIST2 11
(integer) 0

 

posted @ 2017-05-17 13:52  大尾巴狼R  阅读(311)  评论(0编辑  收藏  举报