一、概述
在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List中可以包含的最大元素数量是4294967295。
从元素插入和删除的效率视角来看,如果我们是在链表的两头插入或删除元素,这将会是非常高效的操作,即使链表中已经存储了百万条记录,该操作也可以在常量时间内完成。然而需要说明的是,如果元素插入或删除操作是作用于链表中间,那将会是非常低效的。
二、list操作命令
示例:lpush key val
用法:向list的左侧(头部)插入一个值
返回:执行 lpush命令后,列表的长度。
示例:rpush key val
用法:向list的右侧(尾部)插入一个值
返回:执行 rpush命令后,列表的长度。
示例:lpushhx key val
用法:向list的左侧(头部)插入一个值,如果这个值不存在时,不会执行任何操作
返回:执行 命令后,列表的长度。
示例:rpushhx key val
用法:向list的右侧(尾部)插入一个值,如果这个值不存在时,不会执行任何操作
返回:执行 命令后,列表的长度。
示例:lpop key
用法:头部去除一个值,并返回这个值
返回:存在就返回列表第一个值,不存在返回nil
示例:rpop key
用法:尾部去除一个值,并返回这个值
返回:存在就返回列表最后一个值,不存在返回nil
示例:rpop key
用法:尾部去除一个值,并返回这个值
返回:存在就返回列表最后一个值,不存在返回nil
示例:llen key
用法:返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。
返回:返回列表的长度
示例:lrem key count val
用法:移除列表中count个值尾val的元素
返回:count大于0:从头开始搜索count个值为val的元素并移除
count小于0:从尾开始搜索count个值为val的元素并移除
count等于0:移除列表中所有值为val的元素
最后返回移除的个数
示例:lrange key start end
用法:取出list中从start到end范围内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
返回:返回一个包含区间元素的列表
示例:ltrim key start end
用法:对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最 后一个元素, -2 表示列表的倒数第二个元素,以此类推。
返回:操作成功返回OK
示例:linsert befort|after pivot val
用法:用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作。
当列表不存在时,被视为空列表,不执行任何操作。
如果 key 不是列表类型,返回一个错误。
返回:操作成功返回列表的长度。列表不存在返回0,val不存在返回-1
示例:L/Rpoppush sourcekey destkey
用法:用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
返回:被弹出的元素值
127.0.0.1:6379> lpush message update clean full ctrl_switch close 一次添加多个val到list中
(integer) 5
127.0.0.1:6379> lrange message 0 -1 查询一个范围内的值,返回了一个列表
1) "close"
2) "ctrl_switch"
3) "full"
4) "clean"
5) "update"
127.0.0.1:6379> linsert message after full change 向指定的val之后插入一个值
(integer) 6
127.0.0.1:6379> lrange message 0 -1 在full的after之后存在了change这个值
1) "close"
2) "ctrl_switch"
3) "full"
4) "change"
5) "clean"
6) "update"
127.0.0.1:6379>