list介绍:

列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。
列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为O(1),获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的(和从只有20个元素的列表中获取头部或尾部的10条记录的速度是一样的)。与散列类型键最多能容纳的字段数量相同,一个列表类型键最多能容纳2^32-1个元素。

命令:

1、向列表两端增加元素 LPUSH RPUSH

LPUSH key value [value …]

RPUSH key value [value …]

LPUSH命令用来向列表左边增加元素,返回值表示增加元素后列表的长度。向列表右边增加元素的话则使用RPUSH命令,其用法和 LPUSH命令一样

2、从列表两端弹出元素 LPOP RPOP

LPOP key

RPOP key

有进有出,LPOP命令可以从列表左边弹出一个元素。LPO命令执行两步操作:第一步是将列表左边的元素从列表中移除,第二步是返回被移除的元素值。结合 LPUSH RPUSH可以使用列表类型来模拟栈和队列的操作:如果想把列表当做栈,则搭配使用工PUSH和LPOP或RPUSH和RPOP,如果想当成队列,则搭配使用LPUSH和 RPOP或RPUSH和LPOP。

3、获取列表中元素的个数 LLEN

LLEN key

LLEN命令的功能类似SQL语句SELECT COUNT(*)FROM table_name,但是LLEN的时间复杂度为O(1),使用时Redis会直接读取现成的值,而不需要像部分关系数据库(如使用 InnoDB存储引擎的MySQL表)那样需要遍历一遍数据表来统计条目数量。当键不存在时LLEN会返回0

4、获得列表片段 LRANGE

LRANGE key start stop

LRANGE命令是列表类型最常用的命令之一,它能够获得列表中的某一片段。LRANGE命令将返回索引从start到stop之间的所有元素(包含两端的元素)。Redis的列表起始索引为0。LRANGE命令在取得列表片段的同时不会像LPOP一样删除该片段,另外LRANGE 命令与很多语言中用来截取数组片段的方法slice有一点区别是LRANGE返回的值包含最右边的元素。LRANGE命令也支持负索引,表示从右边开始计算序数,如”-1″表示最右边第一个元素,”-2″表示最右边第二个元素,依次类推。显然,LRANGE numbers 0 -1可以获取列表中的所有元素。另外一些特殊情况如下。

1.如果start的索引位置比stop的索引位置靠后,则会返回空列表。
2.如果stop大于实际的索引范围,则会返回到列表最右边的元素。

5、删除列表中指定值 LREM

LREM key count value

LREM命令会删除列表中前count个值为value的元素,返回值是实际删除的元素个数。根据count值的不同,LREM命令的执行方式会略有差异。
(1)当count >0时 LREM命令会从列表左边开始删除前count个值为 value的元素。
(2)当count<0时LREM命令会从列表右边开始删除前| count|个值为value的元素。
(3)当count =0是LREM命令会删除所有值为value的元素。

1、2分别代表:从左边开始删除第一个为“2”的元素;删除所有为“2”的元素

6、获得/设置指定索引的元素值 LINDEX LSET

LINDEX key index

LSET key index value

如果要将列表类型当作数组来用,LINDEX命令是必不可少的。LINDEX命令用来返回指定索引的元素,索引从0开始。如果index是负数则表示从右边开始计算的索引,最右边元素的索引是-1。
LSET是另一个通过索引操作列表的命令,它会将索引为index的元素赋值为value。

1:获取最右边元素 2:获取第一个元素 3:将第二个元素置为8

7、只保留列表指定片段 LTRIM

LTRIM key start stop

LTRIM命令可以删除指定索引范围之外的所有元素,其指定列表范围的方法和LRANGE命令相同。如:

只保留第二、第三个元素

8、向列表中插入元素LINSERT

LINSERT key BEFORE|AFTER pivot value

LINSERT命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面。

以下分别表示在1后边添加“0”,在2前边添加“1”

9、将元素从一个列表转到另一个列表RPOPLPUSH

RPOPLPUSH source destination

RPOPLPUSH是个很有意思的命令,从名字就可以看出它的功能:先执行RPOP命令再执行LPUSH命令。RPOPLPUSH命令会先从 source列表类型键的右边弹出一个元素,然后将其加入到destination列表类型键的左边,并返回这个元素的值。

注意:一次命令只会操作一个元素,如果元素转化完成之后会删除之前list,再次执行会返回nil