刚开始学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) 1127.0.0.1:6379> LPUSH LIST 2(integer) 2127.0.0.1:6379> LPUSH LIST 3(integer) 3127.0.0.1:6379> LPUSH LIST 4(integer) 4127.0.0.1:6379> LPUSH LIST 5(integer) 5127.0.0.1:6379> LPUSH LIST 6(integer) 6127.0.0.1:6379> BLPOP LIST 11) "LIST"2) "6"127.0.0.1:6379> BLPOP LIST 11) "LIST"2) "5"127.0.0.1:6379> BLPOP LIST 11) "LIST"2) "4"127.0.0.1:6379> BLPOP LIST 11) "LIST"2) "3"127.0.0.1:6379> BLPOP LIST 11) "LIST"2) "2"127.0.0.1:6379> BLPOP LIST 11) "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) 1127.0.0.1:6379> LPUSH LIST 2(integer) 2127.0.0.1:6379> LPUSH LIST 3(integer) 3127.0.0.1:6379> LPUSH LIST 4(integer) 4127.0.0.1:6379> LPUSH LIST 5(integer) 5127.0.0.1:6379> LPUSH LIST 6(integer) 6127.0.0.1:6379> BRPOP LIST 11) "LIST"2) "1"127.0.0.1:6379> BRPOP LIST 11) "LIST"2) "2"127.0.0.1:6379> BRPOP LIST 11) "LIST"2) "3"127.0.0.1:6379> BRPOP LIST 11) "LIST"2) "4"127.0.0.1:6379> BRPOP LIST 11) "LIST"2) "5"127.0.0.1:6379> BRPOP LIST 11) "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) 1127.0.0.1:6379> LPUSH LIST1 2(integer) 2127.0.0.1:6379> LPUSH LIST1 3(integer) 3127.0.0.1:6379> LPUSH LIST1 4(integer) 4127.0.0.1:6379> LPUSH LIST1 5(integer) 5127.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) 1127.0.0.1:6379> LPUSH LIST 2(integer) 2127.0.0.1:6379> LPUSH LIST 3(integer) 3127.0.0.1:6379> LPUSH LIST 4(integer) 4127.0.0.1:6379> LPUSH LIST 5(integer) 5127.0.0.1:6379> LPUSH LIST 6(integer) 6127.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 -11) "2"2) "3"3) "4"4) "3"5) "2"6) "1"127.0.0.1:6379> LINSERT LIST BEFORE 2 5(integer) 7127.0.0.1:6379> LRANGE LIST 0 -11) "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) 7127.0.0.1:6379> LLEN LIST1(integer) 0127.0.0.1:6379> SET KEY 1OK127.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 value127.0.0.1:6379> LPUSH LIST 1 2 3 4 5(integer) 5127.0.0.1:6379> LRANGE LIST 0 -11) "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) 1127.0.0.1:6379> lpush LIST2 1(integer) 1127.0.0.1:6379> lpushX LIST3 1(integer) 0127.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 -11) "1"127.0.0.1:6379> lpush LIST 2(integer) 2127.0.0.1:6379> lpush LIST 3(integer) 3127.0.0.1:6379> lpush LIST 4(integer) 4127.0.0.1:6379> LRANGE LIST 0 -11) "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) 7127.0.0.1:6379> LRANGE LIST 0 -11) "5"2) "1"3) "4"4) "1"5) "3"6) "2"7) "1"127.0.0.1:6379> LREM LIST 1 1(integer) 1127.0.0.1:6379> LRANGE LIST 0 -11) "5"2) "4"3) "1"4) "3"5) "2"6) "1"
例如,当COUNT为负数时:从队尾向队头查找。
127.0.0.1:6379> LRANGE LIST 0 -11) "5"2) "4"3) "1"4) "3"5) "2"6) "1"127.0.0.1:6379> LREM LIST -1 1(integer) 1127.0.0.1:6379> LRANGE LIST 0 -11) "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 -11) "5"2) "4"3) "1"4) "3"5) "2"127.0.0.1:6379> LSET LIST 1 0OK127.0.0.1:6379> LRANGE LIST 0 -11) "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 -11) "5"2) "0"3) "1"4) "3"5) "2"127.0.0.1:6379> LTRIM LIST 1 -2OK127.0.0.1:6379> LRANGE LIST 0 -11) "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 -11) "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) 10127.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) 10127.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) 11127.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) 0127.0.0.1:6379> RPUSHX LIST2 11(integer) 0