List(列表)
1.特点
- Redis List ( 列表 ) 是简单的字符串列表,按照插入顺序排序
- 我们可以添加一个元素到列表的头部 ( 左边 ) 或者尾部 ( 右边 )
- Redis List( 列表 ) 最多可存储 232- 1元素 (4294967295, 每个列表可存储40多亿)
2.常用命令
(1)blpop
移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出的元素为止;
(2)brpop
移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出的元素为止;
(3)lindex
用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推;
(4)linsert
用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作;
(5)llen
用于返回列表的长度;
(6)lpop
用于移除并返回列表的第一个元素;
(7)lpush
将一个或多个值插入到列表头部;
(8)lpushx
将一个值插入到已存在的列表头部,列表不存在时操作无效;
(9)lrange
返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定;
(10)lrem
根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素;
- count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT
- count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值
- count = 0 : 移除表中所有与 VALUE 相等的值
(11)lset
通过索引来设置元素的值;
(12)ltrim
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除;
(13)rpop
用于移除列表的最后一个元素,返回值为已移除的元素;
(14)rpoplpush
用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回;
(15)rpush
用于将一个或多个值插入到列表的尾部(最右边);
(16)rpushx
用于将一个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效;
3.数据结构
数据结构是快速链表quickList
- 列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也就是压缩列表
- 所有的元素紧挨着一起存储,分配的是一块连续的内存
- 普通的链表需要附加的指针空间太大,所以当数据量比较多的时候才会变成quicklist
- redis将链表和ziplist结合组成了quicklist,也就是使用双向指针串起来使用,既满足了快速的插入删除性能,又不会出现太大的空间冗余