一、概述
在redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,redis将为该键创建一个新的链表。与此相反,如果该链表中的所有元素都被移除,那么该键也将会被从数据库中移除。List中可以包含的最大元素数量是4*1024^3-1=4294967295。从元素插入和删除的效率视角来看,如果我们是在链表的两头插入或删除元素,这将会是非常高效的操作,即使链表中已经存储了百万条记录,该操作也可以在常量范围内完成。然而需要说明的是,如果元素插入或删除操作作用于链表的中间,那将是非常低效的。
二、相关命令列表
格式:命令原型 时间复杂度 命令描述 返回值
- LPUSH key value [value ...] O(1) 在指定key所关联的List Value的头部插入参数中给出的所有values。如果该key不存在,该命令将在插入之前创建一个与该key关联的空链表,之后再将数据从链表的头部插入。如果该键的Value不是链表类型,该命令将返回相关的错误信息。返回值是插入后链表中元素的数量。
- LPUSHX key value O(1) 仅有当参数中指定的key存在时,该命令才会在其所关联的List Value的头部插入参数给出的value,否则不会有任何操作发生。返回插入后链表中元素的数量。
- LRANGE key start stop O(S+N) 时间复杂度中S为start参数表示的偏移量,N表示元素的数量。该命令的参数start和end都是0-based。即0表示链表头部的第一个元素。其中start的值也可以为负值,-1表示链表中的最后一个元素(倒数第一个),-2表示倒数第二个并以此类推。该命令在获取元素时,start和end位置上的元素也会被取出。如果start的值大于链表中元素的数量,空链表将会被返回。如果end的值大于元素的数量,该命令则获取从start(包括start)开始,链表中所剩余的所有元素。返回指定范围内元素的列表(不对列表做任何修改)。
- LPOP key O(1) 返回并弹出指定key关联的链表中的第一个元素,即头部元素。如果该key不存在,返回nil。返回值:返回链表头部元素(注意是弹出)
- LLEN key O(1)