[Redis]常见数据和内部编码

相关命令

type (key)

type 命令实际返回的就是当前键的数据结构类型,它们分别是:string(字符串)、list(列 表)、hash(哈希)、set(集合)、zset(有序集合)

但是,这些这是对外的数据结构,实际上 Redis 针对每种数据结构都有自己的底层内部编码实现,而且是多种实现,这样 Redis 会在合适的场景选择合适的内部编码

object encoding (key)

在 Redis 中,你可以使用 object encoding 命令来查看特定键的编码方式。这个命令会返回该键所使用的内部编码。

Redis 数据类型和对应内部编码

数据类型  内部编码
stringstring
int
smbstr
hashhashtable
ziplist
listlinkedlist
ziplist
sethashtable
intset
zsetskiplist
ziplist

 字符串(String)

Redis 的字符串是二进制安全的,它们可以存储任何类型的数据,如文本或二进制数据。字符串的最大长度为 512 MB。

  • raw:直接存储字符串对象。当字符串长度较大时使用这种编码。
  • embstr:将字符串和 Redis 对象头部合并存储。当字符串较短(小于 44 字节)时使用这种编码,以减少内存分配次数和空间消耗。
  • int:对于可以表示为 64 位有符号整数的字符串,使用整数编码,节省存储空间。

 哈希(Hash)

哈希是一个键值对集合,通常用于存储对象。

  • ziplist:适用于小型哈希,将所有键值对存储在一个连续的内存块中。
  • hashtable:对于较大的哈希,使用哈希表编码。

列表(List)

列表是按顺序排列的字符串集合,支持从头部或尾部推入和弹出元素。

  • ziplist:适用于小型列表,将所有元素存储在一个连续的内存块中,适合存储少量元素或元素较短的列表。
  • linkedlist:对于较大的列表,使用双向链表存储,每个节点包含一个指向前后节点的指针。

quicklist是 Redis 3.2 版本引入的一种编码方式,旨在结合 ziplist 和 linklist 的优点,提供更高效的内存使用和性能表现。 

quicklist是一种将多个 ziplist链接在一起的双向链表。每个节点是一个 ziplist ,这种设计的目的是通过减少内存碎片和避免过多的内存分配来优化列表的性能。quicklist 结合了 ziplist 和 linklist 的优势,使得它在存储和操作列表时具有更好的性能和更低的内存开销。

集合(Set)

集合是无序的字符串集合,不允许重复元素。

  • intset:适用于只包含整数值的小型集合。
  • hashtable:对于大型集合或包含非整数值的集合,使用哈希表编码。

有序集合(Sorted Set)(zset)

  • ziplist:适用于小型有序集合,将所有元素和评分存储在一个连续的内存块中。
  • skiplist:对于较大的有序集合,使用跳表(skiplist)和哈希表的组合,以提供高效的范围查询和插入操作。

总结 

Redis 这样设计有两个好处:

1)可以改进内部编码,而对外的数据结构和命令没有任何影响,这样一旦开发出更优秀的内部编码, 无需改动外部数据结构和命令,例如 Redis 3.2 提供了 quicklist,结合了 ziplist 和 linkedlist 两者的优势,为列表类型提供了一种更为优秀的内部编码实现,而对用户来说基本无感知。

2)多种内部编码实现可以在不同场景下发挥各自的优势,例如 ziplist 比较节省内存,但是在列表元素比较多的情况下,性能会下降,这时候 Redis 会根据配置选项将列表类型的内部实现转换为 linkedlist,整个过程用户同样无感知。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[36#]私有化部署地图套装(全球版)

私有化部署地图套装(全球版),是由全球高清卫星影像与100%全球水陆覆盖高程数据组成的全球三维地图套装。 私有化部署地图套装(全球版) 我们在《难以置信,谁还会用离线地球》一文中,为大家分享…

7 Series FPGAs Integrated Block for PCI Express IP核 Advanced模式配置详解(三)

1 TL Settings Transaction Layer (TL)设置只在Advanced模式下有效。 Endpoint: Unlock and PME_Turn_Off Messages: 与端点的电源管理相关,允许发送解锁和电源管理事件关闭消息。 Root Port: Error Messages: Error Correctable(错误可纠正&#xff09…

IO游戏设计思路

1、TCP ,UDP ,KCP ,QUIC TCP 协议最常用的协议 UDP协议非常规的协议,因为需要在线广播,貌似运营商会有一些影响 KCP 基于UDP的协议,GitHub - l42111996/java-Kcp: 基于java的netty实现的可靠udp网络库(kcp算法),包含fec实现&am…

增强版 Kimi:AI 驱动的智能创作平台,实现一站式内容生成(图片、PPT、PDF)!

前言 基于扣子 Coze 零代码平台,我们从零到一轻松实现了专属 Bot 机器人的搭建。 AI 大模型(LLM)、智能体(Agent)、知识库、向量数据库、知识图谱,RAG,AGI 的不同形态愈发显现,如何…

GEO数据挖掘-PCA、差异分析

From 生物技能树 GEO数据挖掘第二节 文章目录 探针注释自主注释流程(了解)PCA图、top1000基因热图探针注释查看示例代码 top 1000 sd 热图离散基因热图,top1000表达基因,只是看一下,不用放文章里 差异分析火山图差异基因热图转换id富集分析-K…

安装mpi4py与dlio_profiler_py的总结

安装mpi4py mpi4py是一个Python库,它提供了与MPI(Message Passing Interface)兼容的接口,使得Python程序能够利用MPI实现并行计算。mpi4py 的核心是基于MPI标准的C/C实现,它能够在高性能计算环境下进行高效的并行处理…

网页版收银系统比安装板收银系统的四大优势

在当今竞争激烈的零售市场中,高效的收银系统对于连锁实体店的管理至关重要。随着科技的不断发展,网页版收银系统成为越来越多零售企业的首选。网页版收银系统以其灵活性、可定制性和便利性,成为现代零售业的利器。本文将探讨网页版收银系统相…

pycharm 关闭项目卡死

PyCharm2023.3.4 关闭一直卡在 closing projects 解决办法: 打开PyCharm, 选择 Help -> Find Action -> 输入 Registry -> 禁用ide.await.scope.completion

MYSQL 集群

1.集群目的:负载均衡 解决高并发 高可用HA 服务可用性 远程灾备 数据有效性 类型:M M-S M-S-S M-M M-M-S-S 原理:在主库把数据更改(DDL DML DCL)记录到二进制日志中。 备库I/O线程将主库上的日志复制到自己的中继日志中。 备库SQL线程读取中继日志…

51cto已购买的视频怎么下载到电脑上?

在数字学习的浪潮中,51CTO已成为众多专业人士和爱好者的知识宝库。但购买了视频课程后,如何将其下载到电脑上以便离线学习呢?这不仅是技术问题,更是时间管理和学习效率的关键。本文将为您揭示简单而高效的步骤,无论您使…

前端面试项目细节重难点(已工作|做分享)

面试官提问:需求场景:页面上有一个单选框,有是否两个选项:当用户选择是,出现一个输入框,用户可以输入内容,给后端的保存接口传入参数radio和content这两个字段,值分别是用户选项和输…

西门子WINCC8.0VBS脚本学习讲解

WinCC VBS脚本置位/复位/取反 二进制变量 "TAG1_BOOL1" 进行置位复位取反操作 步骤:按钮-->对象属性-->事件-->单击鼠标VBS动作填入代码如下: 对二进制变量进行复位 对二进制变量进行置位 对二进制变量进行取反 VBS脚本数学运算/读写批处理 …

百度智能云参与信通院多项边缘计算标准编制,「大模型时代下云边端协同 AI 发展研讨会」成功召开

1 中国信通院联合业界制定、发布多项标准化成果,推动产业发展 大模型开启了 AI 原生时代,云边端协同 AI 构建了「集中式大规模训练」、「边缘分布式协同推理」新范式,有效降低推理时延和成本,提升数据安全和隐私性,也…

安卓App封装全攻略:利用小猪APP分发提升应用发布效率

在快速迭代的移动应用市场,高效且安全地分发安卓应用程序是开发者面临的一大挑战。安卓App封装技术,作为这一挑战的解决方案之一,不仅能够提升应用的安全性,还能简化分发流程。本文将深入探讨安卓App封装的核心概念,以…

小型发电机不发电原因和解决方法

小型发电机不发电可能由多种原因造成,以下是一些常见原因及其解决方法: 1.电池电量不足:小型发电机通常需要电池来启动。如果电池电量不足,可能导致发电机无法启动。此时,您可以使用充电设备对电池进行充电&#xff0…

2025秋招深度学习基础面试题(一)

01. 卷积和BN如何融合提升推理速度 Conv和BN的融合:在网络的推理阶段,可以将BN层的运算融合到Conv层中,减少运算量,加速推理。本质上是修改了卷积核的参数,在不增加Conv层计算量的同时,略去了BN层的计算量。def fuse_conv_bn(conv, bn):std = (bn.running_var + bn.eps).…

深入解读TuGraph计算引擎模型推理系统

作者:李文凯 TuGraph计算引擎模型推理系统将基于迭代计算的图计算框架与模型推理系统相结合,推理系统可自定义推理依赖环境,图迭代计算与推理链路实现隔离。基于共享内存的跨进程通信方式,提高了推理数据交换效率,满足…

VUE3好看的酒网站模板源码

文章目录 1.设计来源1.1 首页界面1.2 十大名酒界面1.3 名酒新闻界面1.4 联系我们界面1.5 在线留言界面 2.效果和结构2.1 动态效果2.2 代码结构 3.VUE框架系列源码4.源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/detai…

2024/5/22 学习杂记

为什么功率放大电路在模电中经常提到? 模拟信号:它是连续变化的电信号,它在时间上和幅度上都是连续的,能够代表信息的连续变化。大多数物理量为模拟信号,如:温度、压力、流量… 非电物理量通过传感器变换成…