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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/400298.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis面试(十六)公平锁释放和排队加锁

锁释放 RedissonFairLock.unlockInnerAsync()方法 这和加锁的逻辑没有太大区别 也就是说在客户端A他释放锁的时候,也会走while true的脚本逻辑,看一下有序集合中的元素的timeout时间如果小于了当前时间,就认为他的那个排队就过期了&#xf…

如何减少 Docker 镜像大小:6 种优化方法

如果您想减少docker镜像的大小,您需要使用构建docker镜像的标准最佳实践。 本博客讨论了您可以快速实施的各种优化技术,以制作最小、最精简的 docker 镜像。我们还将介绍一些用于 Docker 镜像优化的最佳工具。 Docker 作为一种容器引擎,可以…

k8s核心架构分析

k8s核心概念概述 Kubernetes入门:掌握集群核心,释放容器潜能 技术爱好者们,CD集群的核心概念是构建、部署和管理容器化应用的基石。掌握这些概念,不仅助你深入理解技术细节,更能在CD集群中自如操作,无论是…

2 C 语言开发工具选择、 MinGW 的安装与配置、VS Code 的安装与配置、插件推荐

目录 1 开发工具选择 1.1 Visual Studio 1.2 Code::Block 1.3 Clion 1.4 VS Code 1.5 在线编辑工具 2 开发工具安装 2.1 安装 MinGW-w64 2.1.1 MinGW-w64 介绍 2.1.2 解压 MinGW 2.1.3 将 MinGW 添加至环境变量 2.1.4 验证安装 2.2 安装 VS Code 2.2.1 下载安装包…

Avnet ZUBoard 1CG开发板上手—深度学习新选择

Avnet ZUBoard 1CG 开发板上手—深度学习新选择 摘要 本文主要介绍了 Avnet ZUBoard 1CG 开发板的特性、架构、硬件单元等概念,并对如何使用以太网接口和串口连接开发板进行基本介绍,同时辅以两个应用例程演示其功能。 原文链接: FreakSt…

如何编写一个CMakeLists.txt文件(由简到难,较详细)

在Linux系统下,经常使用CMakeLists.txt文件来链接、编译C工程,大部分人clone的代码里都是有CMakeLists.txt文件的,只需要cmake .. 和make就完事了,但在工作中,你必须要有从无到有编写CMakeLists.txt文件的能力。 一、…

【QGroundControl二次开发】十. QT添加GStreamer视频播放同时保存

上一章介绍使用QT播放GStreamer视频流 【QGroundControl二次开发】八. QT实现播放gstreamer视频。 这章介绍如何在原有基础上保存为视频,同时保存为一个个规定大小的小视频。 一. 思想 之前的文章展示了如何在QT中播放GST视频流,这章在原有的基础上增加…

金九银十,软件测试面试题合集(含答案)

前言 前面看到了一些面试题,总感觉会用得到,但是看一遍又记不住,所以我把面试题都整合在一起,都是来自各路大佬的分享,为了方便以后自己需要的时候刷一刷,不用再到处找题,今天把自己整理的这些…

常见的几种用例测试方法

等价类划分法 适用场景:需要有大量的测试数据输入,但是我们实际测试中不可能一一列举进行测试,所以讲数据进行分类,选出具有代表性的数据代表一类数据进行测试。 分类: 有效等价类:满足需求的数据无效等…

普元EOS-新项目不停提示登录信息已过期

1 问题 新创建的EOS精简应用, 项目端口为 28015 启动后,在浏览器输入地址 http://127.0.0.1:28015 。 页面不停提示 “登录信息已过期” 2 解决办法 EOS的项目对Login-Filter的配置错误, EOS的项目在Http安全过滤管理的时候,会…

【原创】java+swing+mysql商品信息管理系统设计与实现

个人主页:程序员杨工 个人简介:从事软件开发多年,前后端均有涉猎,具有丰富的开发经验 博客内容:全栈开发,分享Java、Python、Php、小程序、前后端、数据库经验和实战 开发背景: 使用javaswing技…

使用mybatis注解和xml映射执行javaWeb中增删改查等操作

Mapper接口 使用注解执行SQL语句操作和相应的Java抽象类(对于简单的增删改查使用注解) Mapper public interface EmpMapper {// 根据id删除员工信息Delete("delete from mybatis.emp where id#{id}")public int EmpDelete(Integer id);// 查…

【mysql 第一篇章】系统和数据库的交互方法

一、宏观的查看系统怎么和数据库交互 在我们刚刚接触系统和数据库的时候不明白其中的原理,只知道系统和数据库是需要交互的。所以我们会理解成上图的形式。 二、MYSQL 驱动 随着我们的学习时间的加长以及对程序的了解,发现链接数据库是需要有别的工具辅…

可乐机的设计验证

前言 状态机(State Machine)是一种数学模型,用于表示具有有限状态集合的系统。它通过定义状态、转移规则和事件,描述系统在不同条件下的行为。状态机的核心概念包括状态、事件、转移和动作。状态是系统的具体条件或配置&#xff0…

【Python】函数入门(下)

3))* ** ​​​​​​注意:也遵循位置传参在前面,按关键字传参在后面。 代码示例: def func(*args,**kwargs):print(args,kwargs) 该函数中的参数会自动根据传参的方式不同(即:按位置…

k8s 四种Service类型(ClusterIP、NodePort、LoadBalancer、ExternalName)详解

🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、k8s概述 2、Service在Kubernetes中的…

【Redis】事务

目录 什么是事务 事务操作 MULTI EXEC DISCARD WATCH UNWATCH 什么是事务 Redis 的事务和 MySQL 的事务概念上是类似的. 都是把⼀系列操作绑定成⼀组. 让这⼀组能够批量执⾏. 但是注意体会 Redis 的事务和 MySQL 事务的区别: 弱化的原⼦性: redis 没有 "回滚机制…

Zabbix自动导出PDF报告

zabbix6提供了定时导出PDF报告功能。此功能可按照Dashboard维度,定时自动导出报告,并通过邮件发送。 1.安装 zabbix 提供了官方的rhel8版本的rpm包,可使用yum方式安装,zabbix自动导出PDF功能是基于go环境的zabbix web service程…

C语言 ——— 在杨氏矩阵中查找具体的某个数

目录 何为杨氏矩阵 题目要求 代码实现 何为杨氏矩阵 可以把杨氏矩阵理解为一个二维数组,这个二维数组中的每一行从左到右是递增的,每一列从上到下是递增的 题目要求 在杨氏矩阵中查找具体的某个数 要求:时间复杂度小于O(N) 代码实现…

如何定义和引用二维数组

一.二维数组 常称为矩阵,把二维数组写成行和列的排列形式。、 二.怎么定义二维数组 float pay[3][5]; 以上定义了一个float型的二维数组,第1维有3个元素,第2维有6个元素。每一维的长度分别用一对方括号括起来。 二维数组定义的一般形式为 …