Skip to content

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。