Redis List 数据类型
概述
- 存储内容 可存储有序的字符串列表。
- 常用操作 向列表两端添加元素、获取列表的某一个片段。
- 底层实现 基于双向链表(double linked list)。
- 性能特性
- 向列表两端添加元素的时间复杂度为 O(1);
- 获取元素时,越接近列表两端的元素,访问速度越快;
- 极端场景验证:即便列表包含几千万个元素,获取其头部或尾部的 10 条记录仍能达到极快的速度。
命令
向列表两端增加元素
执行 lpush/rpush 时,Redis 会自动创建这个列表,并将元素插入。如果列表存在就会在已有列表上进行操作。
- 左侧(头部)增加:多个值按传入顺序依次从左侧插入。
lpush key value [value ...] - 右侧(尾部)增加:多个值按传入顺序依次从右侧插入。
rpush key value [value ...]
从列表两端弹出元素
lpop key
rpop key
lpop 命令从列表左边弹出一个元素,会分两步完成。第一步是将列表左边的元素从列表中移除,第二步是返回被移除的元素值。rpop 同理。
获取列表中元素个数
llen key
获取列表片段
lrange key start stop
lrange 命令是列表类型最常用的命令之一,获取列表中的某一片段,将返回 start、stop 之间的所有元素(包含两端的元素),索引从 0 开始。索引可以是负数,如:"-1"代表最后边的一个元素。
删除列表中指定的值
lrem key count value
lrem 命令会在列表里找值为 value 的元素,然后只删除其中的前 count 个。根据 count 值的不同,该命令的执行方式会有所不同:
- 当 count > 0 时,LREM 会从列表左边开始删除。
- 当 count < 0 时,LREM 会从列表后边开始删除。
- 当 count = 0 时,LREM 删除所有值为 value 的元素。
获取/设置指定索引的元素值
LINDEX key index
LSET key index value
只保留列表指定片段
只保留列表指定片段,指定范围和 LRANGE 一致。
LTRIM key start stop
向列表中插入元素
LINSERT key BEFORE|AFTER pivot value
该命令首先会在列表中从左到右查找值为 pivot 的元素,然后根据第二个参数是 BEFORE 还是 AFTER 来决定将 value 插入到该元素的前面还是后面。


