博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis压缩列表
阅读量:4093 次
发布时间:2019-05-25

本文共 512 字,大约阅读时间需要 1 分钟。

Redis压缩列表

  • 概述
    • 压缩列表 ziplist 是列表键和哈希键的底层实现之一。
    • 为了节约内存而开发
  • 构成
    • zlbytes
      • 占用字节数
    • ztail
      • 头尾的偏移量
    • zllen
      • 节点数量
    • entryX
      • 列表节点
        • encoding
          • 数据类型及长度
            • 字节数组
              • 1,2,5字节 最高位00,01,10
            • 整数
              • 最高位11开头
        • content
          • 保存节点值
        • previouse_entry_length
          • 前一节点的长度1字节或5字节
    • zlend
      • 标记列表末端
  • 连锁更新
    • 如果前一节点长度小于254字节,previous_entry_length 用一个字节保存长度值
    • 如果前一节点长度大于等于254字节,previous_entry_length用5个字节保存长度值
    • 问题
      • 前几节点连续几个250-253字节的,一个长度为254的节点插入头结点,后面随之都要重新分配空间
      • 删除节点同样会触发连锁更新
      • 每次分配时间复杂度O(N),连锁更新最坏时间复杂度O(N^2)
    • 注意
      • 虽然时间复杂度高,但是发生的概率并不会很高
      • 即使发生,只要影响的节点不多也不会对性能造成影响
      • 平均时间复杂度O(N)不会影响正常的操作
  • 参考
  • 《Redis设计与实现》

转载地址:http://ahiii.baihongyu.com/

你可能感兴趣的文章
【Unity】封装SQLite管理类
查看>>
【Unity】面试题整理
查看>>
【C#】如何实现一个迭代器
查看>>
【Unity】Destroy和DestroyImmediate的区别
查看>>
【Lua】Mac系统下配置SublimeText的Lua编译环境
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
【Unity】微信登录后将头像存为bytes,将bytes读取成sprite图片
查看>>
【Unity】使用GPS定位经纬度
查看>>
【UGUI/NGUI】一键换Text/Label字体
查看>>
【C#】身份证本地验证
查看>>
【Unity】坑爹的Bug
查看>>
【算法】求数组中某两个数的和为目标值
查看>>
如何高效学习动态规划?
查看>>
动态规划法(六)鸡蛋掉落问题(一)
查看>>
LeetCode 887.鸡蛋掉落(C++)
查看>>
Dijkstra‘s algorithm (C++)
查看>>
奇异值分解(SVD)的原理详解及推导
查看>>
算法数据结构 思维导图学习系列(1)- 数据结构 8种数据结构 数组(Array)链表(Linked List)队列(Queue)栈(Stack)树(Tree)散列表(Hash)堆(Heap)图
查看>>
求LCA最近公共祖先的离线Tarjan算法_C++
查看>>
Leetcode 834. 树中距离之和 C++
查看>>