当前位置: 首页 > news >正文

redis列表若干记录

2、列表

  1. ziplist
    1. ziplist参数
      数据表格
    2. entry结构
      1. entry-data:节点存储的元素
      2. prelen:记录前驱节点长度
      3. encoding:当前节点编码格式
      4. encoding
        1. encoding属性 使用多个子节点存储节点元素长度,这种多字节数据存储在计算机内存中或者进行网络传输的时的字节顺序称为字节序。
          1. 大端字节序:低字节数据保存在内存高地址位置,高字节数据保存在内存低地址位置。
          2. 小端字节序:低字节数据保存在内存低地址位置,高字节数据保存在内存高地址位置。
          3. CPU处理指令通常按照内存地址增长方向执行的。若使用小端字节序,cpu执行效率会更高。而ziplist就采用小端字节序,所以它有CPU执行优势
    3. ziplist查找元素
      1. 从某个节点开始查找,计算当前节点属性(encoding、lensize、len)
      2. 如果当前节点时字符串编码,则对比传入的内容,有则返回
      3. 如果节点元素是数值编码,并且还没对查找内容进行编码,则先编码再对比(不需要比对encoding了)
      4. 对比结束不符合就跳转到下一个节点继续比对
    4. ziplist插入元素
      1. 计算前驱节点长度并放入prelen中
      2. 对插入元素进行内容编码,计算编码后的长度(req)
      3. 计算prelen长度
      4. 计算后驱节点长度(nextdiff)
      5. 重新为ziplist分配内存(当前长度+req+nextdiff
      6. 将插入位置后面所有的节点后移
      7. 修改后驱节点的prelen属性
      8. 更新zltail属性
      9. 更新zllen属性
    5. ziplist级联更新(极端情况)
      1. 会涉及大量的内存拷贝,所以这个时候应该采用quicklist
  2. quicklit
    1. quicklist通过将一个ziplist拆分为多个短的ziplist,避免插入或删除元素时候导致大量的内存拷贝。
    2. 当链表很长的时候,中间节点访问效率较低时,redis会对中间节点进行压缩节省内存空间。
    3. 将元素插入quicklist头部
      1. 判断头节点的ziplist是否已满,未满则直接插入
      2. 若已满则创建新的节点,将元素插入新节点的ziplist中

ziplist结构紧凑,使用一整块内存存储链表的所有数据,其只有一种编码格式OBJ_ENCODING_QUICKLIST

相关文章:

  • 如何使用用户名和密码访问salesforce的api
  • 【C++】C++11新增特性
  • 云计算实训31——playbook(剧本)基本应用、playbook常见语法、playbook和ansible操作的编排
  • ADB-DROM
  • 自学编程从哪个语言入手比较好?
  • 【数据结构初阶】二叉树--基本概念
  • Python实现文件复制和移动的高级技巧
  • 汽车免拆诊断案例 | 2013款北京现代悦动车发动机偶尔无法起动
  • 湖北风水大师李彦良受邀为徐东商圈武汉印楼盘做易经风水讲座
  • HTML左右分页更新【搬代码】
  • JavaScript语法基础之转义字符与注释
  • 【人工智能】Transformers之Pipeline(十):视频分类(video-classification)
  • 设计模式之解释器模式
  • 得到任务式 大模型应用开发学习方案
  • 字符函数和字符串函数(一)
  • 如何优雅的薅羊毛之Flux.1免费使用还支持中文prompt
  • Git使用方法(二)---常用命令-半小时学会git
  • Vue3项目-Electron构建桌面应用程序
  • 【软件造价咨询】软件造价之全国各省市功能点单价分析
  • mongodb分片集群搭建
  • “子宫内膜异位症”相关论文男性患者样本超六成?福建省人民医院展开调查
  • 41年轮回,从洛杉矶奔向洛杉矶,李宁故地重游再出发
  • 市场监管总局通报民用“三表”专项检查结果
  • 李公明 | 一周画记:生活就是抵抗
  • 全国铁路迎来返程客流高峰,预计今日发送2040万人次
  • 美国警方:爱达荷州交通事故致7人死亡,8名伤者预计无生命危险