List数据类型就是一个每一个子元素都是string类型的双向链表结构,所以List类型提供链表支持所有操作。List主要功能是push,pop,获取一个范围内所有值等操作,它既可以做栈,又可以做队列。List类型在互联网应用中非常有用,例如存放微博中"我关注的列表",或者论坛中所有回帖ID。List的索引是从0开始的。
List的相关操作:
--lset key index value --
设置list指定下标的元素值,成功返回1,key或者下标不存在返回错误
--lpush key value [value1 [value2]..] --
向key对应的list头部添加一个字符串元素,当key对应的list不存在时,先创建list再添加value,成功返回key对应list的长
度,失败返回0。
--rpush key value [value1 [value2]..] --
向key对应的list尾部添加一个字符串元素,当key对应的list不存在时,先创建list再进行rpush。返回key对应list的长度
--lpushx key value --
--rpushx key value --
与lpush,rpush功能相同,只是当key不存在的时候不会创建新的list,且只能接受一个value
--linsert key before|after pivot value --
在key对应的list值为pivot的下标后/前插入value。当有多个pivot存在时,仅在第一个所处的下标处进行操作当key对应的
list不存在时返回0,当key对应的list存在但是povit不存在时返回-1,当key对应的值不是list返回错误
lpush 进行多个推入操作时,后面的值在头部;rpush 进行多个推入时,后面的值在尾部。流程如下图:
--llen key --
返回key对应list的长度,如果key不存在返回0,如果key对应的类型不是List返回错误
--lindex key index --
返回key对应的list的index索引的值,不存在返回nil
--lrange key start end --
返回key对应的list指定区域(start-end)的元素,下标从0开始,-1表示倒数第一个元素,key不存在或者start-end之间没有
元素,返回空列表
lrange 操作时,当start 是正数时,必须必end小,当start时负数时,必须必end大,简而言之,start所处的位置,必须必end所处的位置靠近头部,否则返回空列表。
--ltrim key start end --
截取并保留key对应的list对应下标从start到end的元素,并删除其他元素。start,end为负时表示倒数第n个,成功返回1(OK)
ltrim 操作时,当end下标位于start之前时,将删除所有元素。
--lrem key count value --
从List头部(count为正)或尾部(count为负)删除一定数量(count绝对值)的匹配value的元素,返回删除的元素数量,count
为0时全部删除。
--lpop key --
从key对应的List头部删除并返回删除元素,如果key不存在返回nul,如果key对应的值不是list则返回错误
--rpop key --
从key对应的List尾部删除并返回删除元素,如果key不存在返回nul,如果key对应的值不是list则返回错误
--blpop key [key1 [key2]..] timeout --
从左到右扫描key-keyN,返回第一个非空List进行pop操作并返回操作的key以及lpop出的值。如果所有的list都是空或者不存
在,阻塞timeout秒,timeout为0时表示一直阻塞。阻塞时如果其他客户端对key-keyN中进行了push操作,阻塞接触并返回。如
果设置了timeout不为0,超时发生时返回nil
--brpop key [key1 [key2]..] timeout --
与blpop相似,只是从尾部进行删除
lrem根据参数count的值,移除列表中与参数value相等的元素。
- count > 0 : 从表头开始向表尾搜索,移除与value相等的元素,数量为count。
- count < 0 : 从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值。
- count = 0 : 移除表中所有与value相等的值。
--rpoplpush fromkey tokey --
从第一个list的尾部移除元素并push到第二个list的头部,并返回移动值,当fromkey对应的值不是list的时候返回一个错误,
当fromkey对应的值不存在时返回nil
--brpoplpush fromkey tokey timeout --
从第一个list尾部移除元素到第二个list头部,当fromkey对应的值不存在的时候将阻塞timeout秒,timeout为0的时候将一直
阻塞,如果别的客户端有人对fromkey进行push操作将返回。当timeout不为0且阻塞完毕,那么返回nil