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的命令没有一个兼具设置过期时间的功能。