Redis使用篇 - 列表对象

列表对象

一个列表对象最多可以存储2^32 - 1个元素。

.

编码

3.2.0版本之前

ziplistlinkedlist

3.2.0版本以及之后

quicklist

.

ziplist

ziplist编码的列表对象使用压缩列表作为底层实现。每个压缩列表节点保存一个列表元素。

Redis使用篇 - 列表对象_第1张图片

.

linkedlist

linkedlist编码的列表对象使用双向链表作为底层实现。每个双向链表节点保存了一个字符串对象,每个字符串对象保存了一个列表元素。

Redis使用篇 - 列表对象_第2张图片
(注意:图8-6使用的仅仅是简化的字符串对象表示)

.

编码转换

当列表对象可以同时满足以下两个条件时,列表对象使用ziplist编码:
1. 列表对象保存的所有字符串元素的长度都小于等于64字节。(list-max-ziplist-value)
2. 列表对象保存的元素数量小于等于512个。(list-max-ziplist-entries)
否则使用linkedlist编码。

.

quicklist

快速列表的节点使用linkedlist来存储,而每个linkedlist节点使用ziplist存储,每个ziplist节点存储实际的列表元素。

Redis使用篇 - 列表对象_第3张图片

.

使用场景

  • 简单的消息队列

    使用brpop、lpush 命令或者 blpop、rpush 命令。

  • 分页、列表显示数据

    使用lrange、ltrim等命令。

  • 队列、栈、容量有限的集合

    使用lpush、rpop 或者 rpush、lpop命令。

    使用lpush、lpop 或者 rpush、rpop命令。

    使用lpush、ltrim 或者 rpush、 ltrim命令。
    .

命令

  • lpush

    添加元素到列表的表头。

    lpush key value [value…]

  • lpushx

    列表存在时,才可以添加元素到列表的表头。

    lpushx key value [value…]

  • lpop

    移除并返回列表的表头元素。

    lpop key

  • llen

    返回列表中元素的个数。

    llen key

  • lindex

    返回指定索引位置的元素。

    lindex key index

  • linsert

    在指定元素之前或者之后,插入元素。

    linsert key before|after pivot value

  • lrange

    返回指定范围内的所有元素。

    lrange key start stop

  • lrem

    删除指定数量的值为给定值的元素。(count > 0,从表头到表尾的顺序删除元素;count < 0,从表尾到表头的顺序删除元素;count = 0,删除所有值为给定值的元素)

    lrem key count value

  • lset

    设置指定索引位置的元素的值为给定值。

    lset key index value

  • ltrim

    裁剪列表。

    ltrim key start stop

  • blpop

    给定超时时间内,移除并返回表头元素。(从左至右的顺序,查找非空列表,依次弹出元素)timeout以秒为单位,0表示没有元素则永久阻塞。

    blpop key [key…] timeout

  • rpop

    移除并返回表尾元素。

    rpop key

  • rpush

    添加元素到表尾。

    rpush key value [value…]

  • rpushx

    当列表存在时,才可以添加元素到表尾。

    rpushx key value [value…]

  • rpoplpush

    移除第一个列表的表尾元素到第二个列表的表头。

    rpoplpush source destination

  • brpoplpush

    给定超时时间(以秒为单位,0表示永久阻塞),移除第一个列表的表尾元素到第二个列表的表头。

    brpoplpush source destination timeout

你可能感兴趣的:(#,Redis)