• 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  黄健宏

  • 相关阅读:
    41 快速的复制一张表
    4 cdh 5.12 centos 6.10三节点安装
    40 insert语句的锁
    oracle 11g 数据库恢复技术 ---02 控制文件
    05 使用bbed跳过归档恢复数据文件
    Springboot 配置文件与对象之间进行映射之@ConfigurationProperties
    @ConditionalOnProperty来控制Configuration是否生效
    Oracle 服务名/实例名,Service_name 和Sid的区别
    @Value中冒号的作用
    springboot读取配置不存在报错
  • 原文地址:https://www.cnblogs.com/zpcoding/p/12375252.html
Copyright © 2020-2023  润新知