首页 > 数据库 >Redis-数据结构与对象-压缩列表

Redis-数据结构与对象-压缩列表

时间:2023-01-09 17:45:34浏览次数:40  
标签:字节 Redis 列表 长度 数据结构 节点 previous

压缩列表

当一个列表键只包含少量列表项, 并且每个列表项要么就是小整数值, 要么就是长度比较短的字符串, 那么 Redis 就会使用压缩列表(ziplist)来做列表键的底层实现。

当一个哈希键只包含少量键值对, 并且每个键值对的键和值要么就是小整数值, 要么就是长度比较短的字符串, 那么 Redis 就会使用压缩列表来做哈希键的底层实现。

每个压缩列表节点可以保存一个字节数组或者一个整数值,具体类型由该节点的编码表示。

每个节点的 previous_entry_length 属性都记录了前一个节点的长度:

  • 如果前一节点的长度小于 254 字节, 那么 previous_entry_length 属性需要用 1 字节长的空间来保存这个长度值。
  • 如果前一节点的长度大于等于 254 字节, 那么 previous_entry_length 属性需要用 5 字节长的空间来保存这个长度值,高一个字节固定为0xFE表示字段占5个字节,真正的长度在低4个字节中保存。

因此若插入节点或删除节点,可能会导致previous_entry_length 属性的连锁更新,连锁更新出现的机率并不高。

 

标签:字节,Redis,列表,长度,数据结构,节点,previous
From: https://www.cnblogs.com/gcr277/p/17037741.html

相关文章

  • laravel Redis sentinel config
    'default'=>['tcp://11.11.11.11:26379','tcp://11.11.11.11:26381','tcp://11.11.11.11:26382',//这3个都是sentinel节点......
  • C++成员初始化表达式列表的使用
    在类的构造函数中,首选使用成员初始化表达式列表去给类的对象赋值,这个比构造函数体种赋值速度更快,开销小解答如下:赋值初始化,通过在函数体内进行赋值初始化;列表初始化,在......
  • Redis-数据结构与对象-整数集合
    整数集合整数集合(intset)是集合键的底层实现之一:当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。虽然 intset......
  • Redis-数据结构与对象-跳表
    跳表Redis使用跳跃表作为有序集合键的底层实现之一,如果一个有序集合包含的元素数量比较多,又或者有序集合中元素的成员(member)是比较长的字符串时,Redis就会使用跳跃......
  • [VueJsDev] 目录列表
    [VueJsDev]目录列表云服务器域名就一年,gitee上有不给发布,没办法https://www.vuejsdev.com/还是迁移到博客园吧。目录列表快速入门开发前小知识vue项目根目录配置......
  • redis笔记
    SDS说一下sds是怎么做的?sds保存三个字段,len,free,char数组。length记录char数组的长度,free记录char数组的空闲长度,char数组记录字符串sds有什么特点?sds通过len和free能在......
  • redis 雪崩、穿透、击穿、并发、缓存讲解以及解决方案
    1.缓存雪崩数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。 比如一个雪崩的简单过程1.redis......
  • 视频直播app源码,vue实现列表自动滚动的方式
    视频直播app源码,vue实现列表自动滚动的方式设置定时器,每三秒,让列表向上移动一行的高度,然后当最后一条数据出现时,在下一个三秒后,恢复到初始状态。 下面是上面描述的代码......
  • Redis-数据结构与对象-链表
    链表Redis使用的C没有内置链表结构,Redis自己实现了链表双端:链表节点带有prev和next指针,获取某个节点的前置节点和后置节点的复杂度都是O(1)。无环:表头节点的prev指针和表......
  • Redis-数据结构与对象-字符串
    stringstring是redis最基本的类型,一个key对应一个value。采用SDS表示字符串,而非C中的简单字符串,SDS本质是结构体,含有free、len、buf三个字段。SDS长度增长时空间预分配......