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

redis---常用数据类型及内部编码

Redis 中每种常用数据类型都对应多种内部编码,这些编码会根据数据特征(如大小、数量)自动切换,以平衡存储效率和操作性能。

1.字符串(String)

用途:存储文本、数字或二进制数据,是最基础的类型。

内部编码

  1. int

    • 适用场景:存储 64 位整数(如 123-456)。
    • 特点:直接以整数形式存储,节省内存,支持快速自增 / 自减(INCR/DECR)。
  2. embstr

    • 适用场景:存储短字符串(Redis 3.2+ 中长度 ≤ 44 字节)。
    • 特点:字符串内容与元数据(如长度)存储在连续内存块,减少内存碎片,创建和删除更高效。
  3. raw

    • 适用场景:存储长字符串(长度 > 44 字节)或非整数数据。
    • 特点:基于动态字符串(SDS)结构实现,支持高效的字符串拼接(APPEND)和修改。

2.哈希(Hash)

用途:存储结构化数据(如用户信息、商品属性),以 “字段 - 值” 对形式组织。

内部编码

  1. ziplist(压缩列表)

    • 适用场景:字段数量少(默认 ≤ 512)且字段 / 值均为短字符串(默认 ≤ 64 字节)。
    • 特点:所有字段和值按顺序紧凑存储在连续内存,内存利用率极高,但不适合频繁修改大量字段。
  2. hashtable(哈希表)

    • 适用场景:字段数量多或字段 / 值较长(超过 ziplist 限制)。
    • 特点:采用数组 + 链表结构,支持 O (1) 时间复杂度的增删改查,适合频繁操作。

切换规则:当字段数 > hash-max-ziplist-entries(默认 512)或任一字段 / 值长度 > hash-max-ziplist-value(默认 64 字节)时,自动从 ziplist 转为 hashtable

3. 列表(List)

  • 功能:有序、可重复的元素集合,支持两端插入 / 删除操作。
  • 内部编码
    • ziplist(压缩列表):当列表元素少且元素为短字符串或小整数时使用(默认元素数 ≤512,单个元素 ≤64 字节),连续内存存储,节省空间。
    • linkedlist(双向链表):当列表元素过多或元素过大时使用,适合频繁修改操作。
    • 注意:Redis 3.2+ 引入 quicklist 作为默认编码,结合了 ziplist 和 linkedlist 的优点,将列表分割为多个 ziplist 片段,用链表连接。

4.集合(Set)

  • 功能:无序、不可重复的元素集合,支持交集、并集等操作。
  • 内部编码
    • intset(整数集合):当集合元素全为整数且数量少(默认 ≤512)时使用,连续内存存储,比哈希表更节省空间。
    • hashtable(哈希表):当集合包含非整数元素或元素数量过多时使用,通过哈希表实现去重。

5.zset

             Redis 中的 ZSET(Sorted Set,有序集合)是一种特殊的数据结构,它结合了集合(Set)和有序性的特性。与普通集合(Set)一样,ZSET 中的元素是唯一的,不会重复,但每个元素都会关联一个浮点数分数(score),Redis 正是通过这个分数来为集合中的元素进行排序。

内部编码(存储结构)

ZSet 会根据元素数量和大小自动选择以下编码:

  1. ziplist(压缩列表)

    • 适用场景:元素数量少(默认 ≤128 个)且元素 / 分数都是短值(默认 ≤64 字节)
    • 存储方式:元素和分数成对紧凑存储在连续内存中,按分数排序
    • 优点:内存占用极低,适合小型 ZSet
  2. skiplist + hashtable(跳跃表 + 哈希表)

    • 适用场景:元素数量多或元素 / 分数较大时
    • 存储方式:
      • 跳跃表:按分数排序存储元素,支持快速范围查询和排名计算
      • 哈希表:映射元素到分数,支持 O (1) 复杂度的分数查询
    • 优点:操作效率高,适合大型 ZSet
http://www.xdnf.cn/news/18202.html

相关文章:

  • 如何低比特量化算法的工程实战与落地优化
  • 【考研408数据结构-08】 图论基础:存储结构与遍历算法
  • 让Chrome信任自签名证书
  • AI时代下阿里云基础设施的稳定性架构揭秘
  • C#海康SDK—热成像测温篇
  • gitlab、jenkins等应用集成ldap
  • package.json详细字段解释
  • 大数据技术栈 —— Redis与Kafka
  • JavaScript 性能优化实战:从分析到落地的全指南
  • 网络间的通用语言TCP/IP-网络中的通用规则4
  • Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
  • PyTorch自动求导
  • OpenHarmony之打造全场景智联基座的“分布式星链 ”WLAN子系统
  • Java试题-选择题(11)
  • Consul- acl机制!
  • 【Pycharm虚拟环境中安装Homebrew,会到系统中去吗】
  • 【牛客刷题】岛屿数量问题:BFS与DFS解法深度解析
  • Java NIO (New I/O) 深度解析
  • windows电脑对于dell(戴尔)台式的安装,与创建索引盘,系统迁移到新硬盘
  • Nacos-8--分析一下nacos中的AP和CP模式
  • 从现场到云端的“通用语”:Kepware 在工业互联中的角色、使用方法与本土厂商(以胡工科技为例)的差异与优势
  • vLLM加载lora
  • 【MATLAB例程】水下机器人AUV的长基线定位,适用于三维环境,EKF融合长基线和IMU数据,锚点数量可自适应,附下载链接
  • (一)八股(数据库/MQ/缓存)
  • 在Ubuntu上安装并使用Vue2的基本教程
  • week2-[一维数组]最大元素
  • 监督分类——最小距离分类、最大似然分类、支持向量机
  • 第一章 认识单片机
  • 一个基于前端技术的小狗寿命阶段计算网站,帮助用户了解狗狗在不同年龄阶段的特点和需求。
  • 芯显 15.6寸G156HAE02.0 FHD 宽温液晶模组技术档案