列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。
列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为O(1),获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。
1.向列表两端增加元素
lpush key value [value...] 向列表左边增加元素
rpush key value [value...] 向列表右边增加元素
2.从列表两端弹出元素
lpop key 从列表左边弹出一个元素
rpop key 从列表右边弹出一个元素
3.获取列表中元素的个数
llen key
4.获得列表片段
lrange key start stop
lrange 命令支持负索引,表示从右边开始计算序数,如-1表示最右边第一个元素,-2表示最右边第二个元素。
显然,lrange key 0 -1可以获取列表中的所有元素。另外一些特殊情况下。
- 如果start的索引位置比stop的索引位置靠后,则会返回空列表
- 如果stop大于实际的索引范围,则会返回到列表最右边的元素
5.删除列表中指定的值
lrem key count value
lrem命令会删除列表中前count个值为value的元素。根据count的值不同,lrem命令的执行方式会有略有差异:
- 当count>0时,从列表的左边开始删除前count个值为value的元素
- 当count<0时,从列表的右边开始删除前count个值为value的元素
- 当count=0时,删除所有值为value的元素
6.获得/设置指定索引的值
lindex key index 获得指定索引的值
lset key index value 设置指定索引的值
7.只保留列表指定片段
ltrim key start end
ltrim命令可以删除指定索引范围之外的所有元素,其指定列表范围的方法和lrange命令相同。
8.向列表中插入元素
linsert key before|after pivot value
linsert 命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是before还是after来决定将value插入到该元素的前面还是后面。
9.将元素从一个列表转到另一个列表
rpoplpush source destination
先执行rpop命令再执行lpush命令,rpoplpush命令会先从source列表类型键的右边弹出一个元素,然后将其加入到destinnation列表类型键的左边,并返回这个元素的值,整个过程是原子的。