redis list使用

list是个列表,是有序的。

1、lpush:从列表左侧插入数据,如果列表不存在,则会新建

语法:lpush key element [element . . .]

如lpush li 0 1 2,会从左侧先插入0,再插入1,再插入2。

相近命令:lpushx、rpush、rpushx

lpushx:只在列表存在时,才从列表左侧插入数据,否则,do nothing。

语法:lpush key element [element . . .]

如lpushx lisa 0 1 2,如果exists lisa返回1,且type lisa返回"list",则会从lisa左侧依次插入0、1、2,否则不做任何操作。

rpush:从列表右侧插入数据

如rpush li 3 4 5,会从右侧先插入2,再插入4,再插入5。此时li中元素从左侧依次是"2"、"1"、"0"、"3"、"4"、"5"。

rpushx:只在列表存在时,才从列表右侧插入数据,否则,do nothing。

如rpushx lisa 1 2 3,如果exists lisa返回1,且type lisa返回"list",则会从lisa右侧依次插入1、2、3,否则不做任何操作。

2、lrange:从左侧查看数据

语法:lrange key start stop,start、stop是索引,从0开始,-1表示结尾

如lrange li 0 2,从左侧查看索引在[0, 2]之间的元素,依次返回"2"、"1"、"0"。

lrange li 0 -1,从左侧查看所有元素,依次返回"2"、"1"、"0"、"3"、"4"、"5"。

3、llen:查看列表元素个数

语法:llen key

如llen li,返回4

4、lrem:从列表中删除指定值的元素。

语法:lrem key count element,count是删除几个,因为列表中元素值是可以相同的,所以依据值删除时,可以删除不止一个。

count>0时,表示从左侧依次删除多少个指定值的元素;count<0时,表示从右侧依次删除多少个指定值的元素;count=0时,表示把指定值的元素全部删除。

如lrem lisa 1 3,从lisa列表左侧开始,删除一个值为2的元素。

假如有一个表示英语成绩的列表eng_scores,lpush eng_scores 0 10 20 0 20 10 20 10 0

执行lrange eng_scores 0 -1,结果如下:

127.0.0.1:6379> lrange eng_scores 0 -1
1) "0"
2) "10"
3) "20"
4) "10"
5) "20"
6) "0"
7) "20"
8) "10"
9) "0"

执行lrem eng_scores 2 10,从左侧删除两个值为10的元素,会删除索引为0和8的元素,执行lrange eng_scores 0 -1,结果如下:

127.0.0.1:6379> lrange eng_scores 0 -1
1) "0"
2) "20"
3) "20"
4) "0"
5) "20"
6) "10"
7) "0"

执行lrem eng_scores -2 20,从右侧删除两个值为20的元素,会删除索引为9和7的元素,执行lrange eng_scores 0 -1,结果如下:

127.0.0.1:6379> lrange eng_scores 0 -1
1) "0"
2) "20"
3) "0"
4) "10"
5) "0"

执行lrem eng_scores 0 0,删除值为0的元素,会删除索引为3和9的元素,执行lrange eng_scores 0 -1,结果如下:

127.0.0.1:6379> lrange eng_scores 0 -1
1) "20"
2) "10"

5、lpop:从列表左侧弹出指定个数的元素并返回

语法:lpop key [count]

用lpop操作未用lrem操作过的eng_scores,

如lpop eng_scores,从左侧弹出一个元素并返回。

lpop eng_scores 2,从左侧弹出两个元素并返回。

相近命令:rpop、rpoplpush、blpop、brpop、brpoplpush

rpop:从列表右侧弹出指定个数的元素并返回

语法:rpop key [count]

rpoplpush:从一个列表的右侧弹出元素,并把此元素从左侧插入到另一个列表中

语法:rpoplpush source destination

如rpoplpush eng_scores math_scores,会把eng_scores最右侧的一个元素插入到math_scores的最左侧,一次只能操作一个元素,不能操作多个元素。

blpop、brpop、brpoplpush分别是lpop、rpop、rpoplpush的阻塞版本,b代表block,把列表当阻塞队列使用。

6、lmove:从一个列表的左侧或右侧弹出元素,并把此元素从左侧或右侧插入到另一个列表中。功能比rpoplpush更多。

语法:lmove source destination left | right left | right

如lmove eng_scores his_scores left left,会把eng_scores最左侧的一个元素插入到math_scores的最左侧,同样一次只能操作一个元素,不能操作多个元素。

相近命令:blmove,是lmove的阻塞版本。

7、lindex:查看列表指定索引处的元素

语法:lindex key index,index从0开始

如lindex eng_scores 0

8、linsert:从列表左侧开始,在第一个指定元素的前面或者后面插入一个元素

语法:linsert key before | after pivot element

如linsert eng_scores before 10 20,从eng_scores列表左侧开始,在第一个值为10的元素前面添加一个20。

9、lset:设置某索引的值

语法:lset key index element

假如eng_scores从左到右元素依次是"99"、"20"、"88"、"0"、"20"

如:lset eng_scores 1 10,即设置索引为1处的元素值为10,则eng_scores从左到右元素依次会变为"99"、"10"、"88"、"0"、"20"

如果设置的index不存在,那么会报数组越界。

10、lpos:查询指定元素的索引。pos是position的简写

语法:lpos key element [RANK rank] [COUNT num-matches] [MAXLEN len]

假如eng_scores从左到右元素依次是"99"、"20"、"88"、"0"、"20"、"20"

lpos eng_scores 20,会返回1,即不加任何多余选项的话,会返回从左侧开始第一个匹配的元素的索引。

lpos eng_scores 20 rank 2,会返回4。rank从1开始,表示第一个匹配的,2表示第二个匹配的。。。

lpos eng_scores 20 rank -1,会返回5。rank -1表示找列表最右边的一个匹配的元素的索引。

lpos eng_scores 20 rank 1 count 2,会返回1、4。count 2表示匹配两个元素,rank 1 count 2表示从第一个匹配开始,匹配两个。

lpos eng_scores 20 rank 1 count 2 maxlen 5,会返回???

11、ltrim:仅保留指定索引区间的元素

语法:ltrim key start stop

假如eng_scores从左到右元素依次是"99"、"20"、"88"、"0"、"20"

如ltrim eng_scores 0 2,这时候执行range eng_scores 0 -1,会发现eng_scores列表从左到右的元素依次是"99"、"20"、"88"。

操作list的命令没有一个兼具设置过期时间的功能。

原文地址:https://www.cnblogs.com/koushr/p/5873420.html