Redis 列表

list 简介

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

注:之所以说 Redis 列表是字符串列表,是因为 “字符串对象是 Redis 五种类型的对象中唯一一种会被其他四种对象嵌套的对象”。在本文中意思是说:列表对象嵌套了字符串对象

list 的实现原理

编码方式

列表对象的编码方式可以是 ziplist[压缩列表] 或者 linkedlist[双端链表]

  如果执行下述 RPUSH 命令, 那么服务器将创建一个列表对象作为 numbers 键的值。

redis> RPUSH numbers 1 "three" 5

  1,如果 numbers 键的值对象使用的是 ziplist 编码,这个值对象将会是下图展示的样子

  2,如果 numbers 键的值对象使用的是 linkedlist 编码,这个值对象将会是下图展示的样子

注:上图中的字符串对象是简化的,实质上字符串对象也是同列表对象一样,是一个 redisObject 对象,完整的字符串对象应该是下图所示

编码转换

当列表对象可以同时满足以下两个条件时,列表对象使用 ziplist 编码,否则使用 linkedlist 编码

  1,列表对象保存的所有字符串元素的长度都小于 64 字节;

  2,列表对象保存的元素数量小于 512 个;

注:以上两个条件的上限值是可以修改的,具体可以看配置文件中关于 list-max-ziplist-value 选项和 list-max-ziplist-entries 选项的说明。

常用命令

    LPUSH key val [val2] [val3]  // 将一个或多个元素插入到列表头部
    LPUSHX key val               // 只能把一个元素插入到已存在的列表表头【v >= 4.0 accept multiple element arguments】
    RPUSH key val [val1] [val2]  // 将一个或多个元素插入到列表表尾
    RPUSHX key val               // 只能把一个元素插入到已存在的列表表尾【if list not exist, do nothing】
    LINSERT key before|after value val  // 在列表中已存在的值 value 之前/后插入元素 val【只会把第一个找到的 value 作为 pivot】

    LPOP key   // 将列表中的表头元素弹出并返回
    RPOP key   // 将列表中的表尾元素弹出并返回
    BLPOP key [key2] timeout  // 将列表中的表头元素弹出,从前往后,只弹出一个列表的元素[BLOCK: 阻塞式 timeout: second]
    BRPOP key [key2] timeout  // 将列表中的表尾元素弹出,只弹出一个列表的元素[BLOCK: 阻塞式 timeout: second]
    LTRIM key start stop      // 将列表中索引从 start 到 stop 之间的元素保留,其它全部删除[start : stop]
    LREM key count val        // 将一个列表中与值 val 相同的元素删除[count:绝对值代表删除的元素个数,正负代表删除的方向,0:代表删除所有]

    RPOPLPUSH source destination timeout  //将 source 列表表尾元素移除,并将该元素插入到 destination 列表的表头
    BRPOPLPUSH source destination timeout  //将 source 列表表尾元素移除,并将该元素插入到 destination 列表的表头[阻塞式]

    LLEN key  // 列表的长度
    LINDEX key index  // 列表中下标为 index 的元素的值
    LRANGE key start stop  // 列表范围内的所有元素[start : stop]

    LSET key index val    // 设置列表中下标为 index 元素的值为 val

 参考内容:

  [1]:The Design and Implementation of Redis  黄健宏

posted on 2020-02-27 23:33  爱笑的张飞  阅读(410)  评论(0编辑  收藏  举报

导航