1、介绍
列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。
列表内部是使用双向链表实现的,获取越接近两端的元素速度越快。
一个列表类型键最多能容纳2的32次方-1个元素。
2、命令
(1)向列表两端增加元素
LPUSH key value [value ...]
RPUSH key value [value ...]
LPUSH命令用来向列表左边添加元素,返回值表示增加元素后列表的长度。且该命令支持同时增加多个元素。
LPUSH key value [value ...]
RPUSH key value [value ...]
RPUSH同LPUSH,用来向列表右边添加元素。
(2)从列表两端弹出元素
LPOP key
RPOP key
LPOP命令,从列表左边弹出一个元素,该命令执行两步操作:①将列表左边的元素从列表中移除。②返回被移除的元素。
RPOP命令同LPOP。结合(1)中提到的四个命令,可以使用列表类型来模拟栈和队列操作。
LPOP key
RPOP key
(3)获得列表中元素的个数
LLEN key
该命令无需像部分关系型数据库那样需要遍历一遍数据表来统计条目数量。
(4)获得列表片段
LRANGE key start stop
LRANGE命令返回索引从start到stop之间的所有元素(包含两端的元素)。Redis列表起始索引为0。
LRANGE key start stop
LRANGE获得列表片段的同时,不会像LPOP一样将元素片段从列表中删除。
LRANGE支持负索引,表示从右边开始计算序数。如 "-1" 表示最右边第一个元素,"-2" 表示最右边第二个元素,以此类推。
LRANGE key 0 -1 可以获取列表中所有元素。另外若start的索引位置比stop的索引位置靠后,则会返回空列表,若stop大于实际的索引范围,则会返回到列表最右边的元素。
(5)删除列表中指定的值
LREM key count value
LREM命令会删除列表中前count个值为value的元素,返回值是实际删除的元素个数。根据count 值的不同,LREM命令的执行方式会略有差异:
LREM key count value
- 当 count > 0 时,LREM 命令会从列表左边开始删除前 count 个值为 value 的元素;
- 当 count < 0 时,LREM 命令会从列表右边开始删除前 |count| 个值为 value 的元素;
- 当 count = 0 时,LREM命令会删除所有值为 value 的元素。
(6)获得/设置指定索引的元素值
LINDEX key index
LSET key index value
LINDEX 命令用来返回指定索引元素,索引从 0 开始。如果 index 是负数,则表示从右边开始计算的索引,最右边元素的索引是 -1。
LINDEX key index
LSET key index value
LSET 可以将索引为 index 的元素赋值为value。
(7)只保留列表指定片段
LTRIM key start end
LTRIM 命令可以删除指定索引范围之外的所有元素
LTRIM key start end
LTRIM 命令和 LPUSH 命令一起使用来限制列表中元素数量。比如记录日志时,我们希望只保留最近的100条日志,则每次加入新元素时调用一次 LTRIM 即可。
(8)向列表中插入元素
LINSERT key BEFORE|AFTER pivot value
LINSERT 命令首先会在列表中从左到右查找值为 pivot 的元素,然后根据第二个参数 BEFORE 还是 AFTER 来决定将value值插入到该元素的前面还是后面。
(9)将元素从一个列表转到另一个列表
LINSERT key BEFORE|AFTER pivot value
RPOPLPUSH source destination
从名字可以看出它需要先执行RPOP,再执行LPUSH命令。RPOPLPUSH命令先从 source 列表类型键的右边弹出一个元素,然后再将其加入到 destination 列表类型键的左边,并返回这个元素的值,整个过程是原子的。
RPOPLPUSH source destination