当前位置: 首页 > 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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • c#实现数据导出为PDF的方式
  • C语言典型例题37
  • Astro + Cloudflare Pages 快速搭建个人博客
  • Secure CRT 9.x版本高亮着色配置文件
  • 前端【详解】缓存
  • vue打包更新packge.json版本号
  • 【区块链+食品安全】湖南省食品行业联合会:溯链中国—基于区块链的食品安全可信追溯平台 | FISCO BCOS应用案例
  • DC-4靶机
  • Shell编程基础:从简单脚本到复杂任务自动化
  • 介质套检测方案,如何提升检测效率?
  • C语言程序设计之内存溢出
  • superset定制化配置修改总结
  • AI安全-文生图
  • Python酷库之旅-第三方库Pandas(081)
  • 《编程学习笔记之道:构建知识宝库的秘诀》
  • chrome扩展demo1-小时钟
  • crontab执行失败的多种原因
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript对象详解
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • node和express搭建代理服务器(源码)
  • passportjs 源码分析
  • Quartz初级教程
  • Swoft 源码剖析 - 代码自动更新机制
  • Vim 折腾记
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 基于Android乐音识别(2)
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 实习面试笔记
  • 使用API自动生成工具优化前端工作流
  • 我的业余项目总结
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • # 职场生活之道:善于团结
  • #100天计划# 2013年9月29日
  • #php的pecl工具#
  • (003)SlickEdit Unity的补全
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (10)ATF MMU转换表
  • (安卓)跳转应用市场APP详情页的方式
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (算法设计与分析)第一章算法概述-习题
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (译)计算距离、方位和更多经纬度之间的点
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET 4.0中的泛型协变和反变
  • .NET CLR Hosting 简介
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .Net Core 笔试1