Appearance
List
可以看作一个双向链表,既支持正向检索,也支持反向检索。特征有:
有序
元素可以重复
插入和删除快
查询速度一般
常用来存储有序数据,如:朋友圈点赞列表、评论列表。
常见命令
LPUSH
列表左侧插入一个或多个元素
LPUSH foo L1 L2 L3
L3 -> L2 -> L1
LPOP
从最左边移除数量的元素并返回被移除的元素,没有元素时返回 nil。
LPOP foo 1
RPUSH
RPOP
LRANGE
返回一段角标范围内的所有元素
L3 -> L2 -> L1 -> R1 LRANGE foo 1 3 => L2 L1 R1 LRANGE foo 0 2 => L3 L2 L1
BLPOP
与 LPOP 类似,只不过在没有元素时等待指定时间,而不是直接返回 nil。
BLPOP key [key ...] timeout BLPOP foo 10
BRPOP
模拟栈、队列、阻塞队列
模拟栈
入口和出口在同一边,即只使用 LPUSH 和 LPOP 或只使用 RPUSH 和 RPOP。
模拟队列
入口和出口在不同边,即只使用 LPUSH 和 RPOP 或只使用 RPUSH 和 LPOP。
阻塞队列
入口和出口在不同边,出队时采用 BLPOP 或 BRPOP,即只使用 LPUSH 和 BRPOP 或只使用 RPUSH 和 BLPOP。