02.List相关命令


# List操作
LLEN key
LSET key index element
LREM key count element
LTRIM key start stop
LINDEX key index
LINSERT key BEFORE|AFTER pivot element
LPOS key element [Rank rank] [COUNT num-matches] [MAXLEN len]
LRANGE key start stop

# 队列操作
LPUSH key element [element ...]
LPUSHX key element [element ...]
LPOP key [count]

RPUSH key elemet [element ...]
RPUSHX key element [element ...]
RPOP key [count]
RPOPLRPUSH source destination

# 阻塞操作
BLPOP key [key ...] timeout
BRPOP key [key ...] timeout
BRPOPLPUSH source destination timeout
BLMOVE source destination LEFT|RIGHT LEFT|RIGHT timeout
BLMPOP timeout numkeys key [key ...] LEFT|RIGHT [COUNT count]

LMPOP numkeys key [key ...] LEFT|RIGHT [COUNT count]
LMOVE source destination LEFT|RIGHT LEFT|RIGHT

数据结构

List的数据结构为快速链表QuickList。

在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ZipList,也即是压缩列表。它将所有的元素紧挨着一起存储,分配的是一块连续的内存。当数据量比较多的时候才改成QuickList。

因为普通的链表需要的附加指针空间太大,会浪费空间。所以Redis将链表和ZipList结合起来组成了QuickList,也就是将多个ZipList使用双向链表串起来使用。这样即满足了插入删除性能,又不会出现太大的空间冗余。

参考资料

  1. Redis#List