Redis数据结构对象之列表对象

列表对象

概述

ziplist编码的列表对象使用压缩列表作为底层实现,每个压缩列表节点(entry)保存了一个列表元素。
例子如下。如果numbers键的值对象使用的是ziplist编码,这个这个值对对象将会是如图所示的样子。

另一方面,linkedlist编码的列表对象使用双端链表作为底层实现,每个双端链表节点(node)都保存了
一个字符串对象,而每个字符串对象都保存了一个列表元素。

注意,linkedlist编码的列表对象在底层的双端链表结构中包含了多个字符串对象,这种嵌套字符串对象的行为在哈希对象、集合对象、有序集合对象中都会出现,字符串对象是Redis五种类型的对象中唯一一种会被其他四种对象嵌套的对象

例子

  • 举个例子,如果执行以下RPUSH命令,那么服务器将创建一个列表对象作为numbers键的值
127.0.0.1:6379> RPUSH numbers 1 "three" 5
(integer) 3

在这里插入图片描述

  • 举个例子,如果上面的number键创建按的列表对象使用的不是ziplist编码,而是linkedlist编码,
    那么numbers键的值对象将会是如图所示
    在这里插入图片描述
注意

为了简化字符串对象的表示,在上面的图中使用了一个带有StringObject字样的格子来表示
一个字符串对象,而StringObject字样下面的是字符串对象所保存的值。比如说,如图所示的就是
一个包含了字符串值"three"的字符串对象
在这里插入图片描述

编码转换

当列表对象可以同时满足以下两个条件时,列表对象使用ziplist编码:

  • 1.列表对象保存的所有字符串元素的长度都小于64字节
  • 2.列表对象保存的元素数量小于512个;
    不能满足这两个条件的列表对象需要使用linkedlist编码

对于使用ziplist编码的列表对象来说,当使用ziplist编码所需的两个条件
的任意一个不能被满足时,对象的编码转换操作就会被执行,原本保存在
压缩列表里的所有列表元素都会被转移并保存到双端链表里面,对象的编码,也会从ziplist变为linkedlist

例子

  • 举个例子,代码展示了列表对象因为保存了长度太大的元素而进行编码转换的情况
// 所有元素的长度都小于64字节
127.0.0.1:6379> RPUSH blah "hello" "world" "again"
(integer) 3
127.0.0.1:6379> OBJECT ENCODING blah
"ziplist"
// 将一个66字节长的元素推入
127.0.0.1:6379> RPUSH blah "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"
(integer) 4
// 编码已改变
127.0.0.1:6379> OBJECT ENCODING blah
"linkedlist"
// 列表对象包含512个元素
127.0.0.1:6379> EVAL "for i=1, 512 do redis.call('RPUSH', KEYS[1], i) end" 1 "integers"
(nil)
127.0.0.1:6379> LLEN integers
(integer) 512
127.0.0.1:6379> OBJECT ENCODING integers
"ziplist"
// 再向列表对象推入一个新元素,使得对象保存的元素数量达到513个
127.0.0.1:6379> RPUSH integers 513
(integer) 513
// 编码已改变
127.0.0.1:6379> OBJECT ENCODING integers
"linkedlist"

注意:

以上两个条件的上限值时可以修改的,具体看配置文件中关于
list-max-ziplist-value选项和list-max-ziplist-entries选项

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

SAR ADC教程系列5——FFT频谱泄露以及相干采样

频谱泄露的出现以及如何规避? 为什么要相干采样? 1.分析ADC输出信号的频谱工具:DFT(Discrete Fourier Transform) 重点:DFT相邻频谱频率间隔为fs/N 如何规避频谱泄露? 对于DFT,它对于接收到的信…

算法打卡day15|二叉树篇04|Leetcode 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

算法题 Leetcode 110.平衡二叉树 题目链接:110.平衡二叉树 大佬视频讲解:平衡二叉树视频讲解 个人思路 可以用递归法,计算左右子树的高度差,当超过1时就不为平衡二叉树了; 解法 回顾一下二叉树节点的深度与高度; …

旧华硕电脑开机非常慢 电脑开机黑屏很久才显示品牌logo导致整体开机速度非常的慢怎么办

前提条件 电池需要20%(就是电池没有报废)且电脑接好电源,千万别断电,电脑会变成砖头的 解决办法 更新bios即可解决,去对应品牌官网下载最新的bios版本就行了 网上都是一些更新驱动啊

leetcode代码记录(每日温度

目录 1. 题目:2. 我的代码:小结: 1. 题目: 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如…

Docker 哲学 - 容器操作 -cp

1、拷贝 容器绑定的 volume的 数据,到指定目录 2、匿名挂载 volume 只定义一个数据咋在容器内的path,docker自动生成一个 sha256 的key作为 volume 名字。这个 sha256 跟 commitID 一致都是唯一的所以 ,docker利用这个机制,可以…

5分钟教你激活喀秋莎Camtasia2023中文破解Crack下载附安装教程

Camtasia2023又称喀秋莎2023,集屏幕录制和视频剪辑功能于一体的软件,提供屏幕录制、区域录制、摄像头录制等多种录制方式,Camtasia2023版本带来了新的动态背景库、霓虹光标图像、录制语音旁白等多种新功能,适用于游戏录制、课程录…

ISIS接口MD5 算法认证实验简述

默认情况下,ISIS接口认证通过在ISIS协议数据单元(PDU)中添加认证字段,例如:MD5 算法,用于验证发送方的身份。 ISIS接口认证防止未经授权的设备加入到网络中,并确保邻居之间的通信是可信的。它可…

springboot使用socket和端口启动gRPC服务器的比较

gRPC 服务器启动方式比较 一. 介绍二. 套接字地址方式三. 端口方式四. 如何选择 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 一. 介绍 百度百科套接字 gRPC 是一种高性能的远…

《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)

1.简介 理想很丰满现实很骨感,在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就有点难了。…

C++根据三点求平行四边形的平分阵列

C根据三点求平行四边形的平分阵列 如下图,已知ABC三个点,且ABCD是平行四边形,求各个点的(阵列)的坐标 void OnBnClickedButtonCreatematrix3point() {//通过前面三点,计算出第四点POINTF64 t_pointMiddle;//对角线交点t_pointMi…

iOS常见崩溃简介

1. 崩溃 多指在移动设备(如iOS、Android设备)中或不可移动设备(如:Windows、Linux等设备), 在打开或使用应用程序时出现的突然退出中断的情况(类似于Windows的应用程序崩溃)。 多表现为&#…

关于IP-Adapter的十几个模型,到底是干啥用的?

🎠背景介绍 IP-Adapter的一系列模型在stable diffusion的实际应用中,越来越被频繁的使用到,用于“换脸”或者“保证角色的一致性”,但是很多朋友在安装或者使用别人的工作流的时候,经常会遇到各种各样的问题&#xff…

考研数二要掌握的初中知识点

文章目录 一、整式1. 同底数幂的乘法2. 幂的乘方3. 积的乘方4. 乘法分配律5. 同底数幂的除法 二、分式1. 分式的乘法2. 分式的除法3. 分式的乘方4. 分式的最简公分母5. 负指数幂6. 比例变形7. 分离常数法 三、二次根式0. 平方根和算数平方根的重要概念1. 乘方去根号2. 二次根式…

118. 杨辉三角(Java)

这里写目录标题 题目描述:输入:输出:代码实现: 题目描述: 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 输入: numRows 5输出: [[1],[1,1],[1…

考研数学|武忠祥各阶段搭配用书汇总

看到有人问武忠祥老师,不请自来 武忠祥老师,绝对的宝藏老师,我在考研强化阶段的时候听过他的强化课程,听完之后,很多问题都想通了,所以,如果有人想问武忠祥老师行不行,那我就一个字…

19. UE5 RPG使用GameplayEffect的Attribute Based Modifiers

前几篇文章我也说了GE的基础使用,但是,对一些属性的应用没有述说,后续,我将一点一点的将它们如何使用书写下来。 这一篇,主要就讲解一下Attribute Based Modifiers使用,先说一下它的应用场景,一…

数据结构——栈和队列的表示与实现详解

目录 1.栈的定义与特点 2.队列的定义与特点 3.案例引入 4.栈的表示和操作的实现 1.顺序栈的表示 代码示例: 2.顺序栈的初始化 代码示例: 3.判断栈是否为空 代码示例: 4.求顺序栈长度 代码示例: 5.清空顺序栈 …

Spring Boot中application配置文件的生效顺序

Spring Boot的一个重要特性就是它的自动配置,这一特性在很大程度上依赖于名称为application的配置文件。本文将详细介绍在Spring Boot中,这些配置文件的加载顺序以及每份文件的应用范围。 文章目录 配置文件的种类配置文件的加载顺序配置文件的环境切换 …

操作系统内功篇:硬件结构之CPU缓存一致性

一 CPU Cache的数据写入 1.1 CPU Cache的结构 是由很多个Cache Line组成的,CPU Line是CPU从内存读取的基本单位,CPU Line是由多个标志数据块组成。 1.2 CPU Cache数据的写入 数据不仅仅只有读取,还有数据的写入,写入数据也是先…

【智能算法】斑鬣狗优化算法(SHO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过。 3.代码实现4.参考文献 1.背景 2017年,Dhiman等人受到斑鬣狗自然狩猎行为启发,提出了斑鬣狗优化算法(Spotted Hyena Optimizer, SHO)。 2.算法原理 2.1算法思想 SHO将斑鬣狗狩猎行为分为围捕-狩猎-进攻三…