Redis ssd是什么?Redis 内存空间优化的点都有哪些?embstr 和 row、intset、ziplist分别是什么?

Redis SSD 是什么?

Redis SSD 通常指 Redis 使用 SSD(固态硬盘)作为持久化存储介质的场景。虽然 Redis 是内存数据库(数据主要驻留内存),但其持久化机制(如 RDB 快照和 AOF 日志)需要将数据写入磁盘。使用 SSD 可以显著提升持久化文件的读写速度,尤其在以下场景:

  • 快速恢复:重启时从 RDB/AOF 恢复数据到内存的速度更快。
  • 高吞吐写入:处理大量 AOF 日志写入时,SSD 的 IOPS 能力优于 HDD。
  • 混合存储方案:某些扩展方案(如 Redis on Flash)将冷数据存于 SSD,热数据存于内存,但需第三方支持。

Redis 内存优化关键点

1. 选择高效的数据结构
  • 避免大 Key:单个 Key 的 Value 过大会增加内存和网络开销。
  • 使用 Hash 替代多个 String:存储对象属性时,Hash 的 ziplist 编码比多个 String 更省内存。
  • HyperLogLog:基数统计(如 UV)时,HyperLogLog 仅需 12KB,误差率 <1%。
  • Bitmap:布尔值场景(如用户签到),Bitmap 极度压缩存储。
2. 利用编码优化

Redis 根据数据特征动态选择编码方式,通过配置参数优化:

  • ziplist:列表、哈希、有序集合在元素较少时使用压缩列表。
  • intset:整数集合用于全为整数的集合。
  • quicklist:列表的底层结构(结合 ziplist 和链表)。

配置示例

hash-max-ziplist-entries 512  # Hash 元素数 ≤512 时用 ziplist
hash-max-ziplist-value 64     # Hash 的每个字段值长度 ≤64 字节
set-max-intset-entries 512    # Set 元素数 ≤512 且全为整数时用 intset
3. 控制过期时间与淘汰策略
  • 设置 TTL:自动清理过期数据,避免内存泄漏。
  • 选择淘汰策略:如 volatile-lruallkeys-lfu,根据业务特点配置。
4. 内存碎片管理
  • 启用 Jemalloc:Redis 默认的内存分配器,减少碎片。
  • 监控碎片率:通过 INFO memory 查看 mem_fragmentation_ratio,过高时重启或使用 MEMORY PURGE(需支持)。
5. 共享对象池
  • 小整数复用:Redis 默认缓存 0~9999 的整数,直接复用对象。

embstr、raw、intset、ziplist 详解

1. embstr 与 raw
  • embstr(embedded string)

    • 适用场景:字符串长度 ≤44 字节(Redis 5.0+)。
    • 内存布局:RedisObject 和 SDS(简单动态字符串)在连续内存中分配,减少内存碎片和指针开销。
    • 优点:一次内存分配,CPU 缓存友好。
  • raw

    • 适用场景:字符串长度 >44 字节。
    • 内存布局:RedisObject 和 SDS 分两次分配,内存不连续。

示例

SET key1 "short"      # embstr 编码(长度 5)
SET key2 "a_very_long_string_..."  # raw 编码(长度 >44)
2. intset(整数集合)
  • 适用场景:Set 集合元素全为整数且元素数 ≤ set-max-intset-entries(默认 512)。
  • 结构:连续内存存储有序整数数组,支持 int16/int32/int64 动态升级。
  • 优点:无哈希表开销,内存紧凑。

示例

SADD numbers 1 2 3    # intset 编码
SADD numbers "hello"  # 编码变为 hashtable
3. ziplist(压缩列表)
  • 适用场景:List、Hash、ZSet 在元素较少且值较小时使用。
  • 结构:连续内存块,通过长度字段和特殊编码压缩数据,无指针开销。
  • 优点:内存高效,但修改操作时间复杂度高(需重新分配内存)。

配置参数

list-max-ziplist-size -2        # Quicklist 中每个 ziplist 节点大小
zset-max-ziplist-entries 128    # ZSet 元素数 ≤128 时用 ziplist
zset-max-ziplist-value 64       # ZSet 元素值长度 ≤64 字节

溢出页管理与数据存储格式

行溢出(Row Overflow)
  • 问题:当 Redis 的 Key 或 Value 过大时,内存碎片可能增加,但 Redis 无传统数据库的行溢出机制(因数据全在内存)。
  • 优化:通过分片(如 Hash 分桶)或压缩大 Value(如 gzip)。
数据存储格式
  • RedisObject:所有 Redis 数据统一封装为 redisObject,包含类型(string/hash 等)、编码(embstr/ziplist 等)和指针。
  • SDS(简单动态字符串):动态扩展的字符串结构,支持二进制安全与高效追加操作。

总结

技术点核心作用优化场景
SSD 持久化加速 RDB/AOF 的读写快速恢复、高吞吐写入
embstr短字符串内存优化存储小文本(如 Session ID)
intset整数集合内存压缩存储 IP 黑白名单
ziplist小规模列表/哈希/有序集合的压缩存储存储对象属性、小型排行榜
内存碎片管理减少无效内存占用长期运行的高频写入场景

通过合理选择数据结构、调整编码参数及利用 Redis 特性,可显著降低内存占用并提升性能。

在这里插入图片描述

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

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

相关文章

【蓝桥杯】 数字诗意

数字诗意 在诗人的眼中&#xff0c;数字是生活的韵律&#xff0c;也是诗意的表达。 小蓝&#xff0c;当代顶级诗人与数学家&#xff0c;被赋予了”数学诗人”的美誉。他擅长将冰冷的数字与抽象的诗意相融合&#xff0c;并用优雅的文字将数学之美展现于纸上。 某日&#xff0…

DHCP 服务器运行流程图

以常见的 DHCP v4 为例,其完整流程如下: 一、客户端请求 IP 地址阶段 DHCPDiscover:客户端启动后,会以广播的形式发送 DHCPDiscover 报文,目的是在网络中寻找可用的 DHCP 服务器。该报文中包含客户端的 MAC 地址等信息,以便服务器能够识别客户端。DHCPOffer:网络中的 D…

一种企业信息查询系统设计和实现:xujian.tech/cs

一种企业信息查询系统设计和实现&#xff1a;xujian.tech/cs 背景与定位 企业在对外合作、风控审查或市场调研时&#xff0c;常需快速获取公开的工商信息。本文介绍一个企业信息搜索引擎&#xff0c;面向普通用户与开发者&#xff0c;帮助快速定位企业名称、统一社会信用代码…

前端面试高频算法

前端面试高频算法 1 排序算法&#xff1b;1.1 如何分析一个排序算法1.1.1 执行效率3.1.2 内存消耗1.1.3 稳定性 1.2 冒泡排序&#xff08;Bubble Sort&#xff09;1.3 插入排序&#xff08;Insertion Sort&#xff09;1.4 选择排序&#xff08;Selection Sort&#xff09;1.5 归…

C++初阶-模板初阶

目录 1.泛型编程 2.函数模板 2.1函数模板概念 2.2实现函数模板 2.3模板的原理 2.4函数模板的实例化 2.4.1隐式实例化 2.4.2显式初始化 2.5模板参数的匹配原则 3.类模板 3.1类模板定义格式 3.2类模板的实例化 4.总结 1.泛型编程 对广泛的类型法写代码&#xff0c;我…

「Mac畅玩AIGC与多模态02」部署篇01 - 在 Mac 上部署 Ollama + Open WebUI

一、概述 本篇介绍如何在 macOS 环境下本地部署 Ollama 推理服务,并通过 Open WebUI 实现可视化交互界面。该流程无需 CUDA 或专用驱动,适用于 M 系列或 Intel 芯片的 Mac,便于快速测试本地大语言模型能力。 二、部署流程 1. 环境准备 安装 Homebrew(如尚未安装):/bin…

JavaScript 中 undefined 和 not defined 的区别

在 JavaScript 的调试过程中&#xff0c;你是否经常看到 undefined 却不知其来源&#xff1f;是否曾被 ReferenceError: xxx is not defined 的错误提示困扰&#xff1f;这两个看似相似的概念&#xff0c;实际上是 JavaScript 类型系统中最重要的分水岭。本文将带你拨开迷雾&am…

django admin AttributeError: ‘UserResorce‘ object has no attribute ‘ID‘

在 Django 中遇到 AttributeError: ‘UserResource’ object has no attribute ‘ID’ 这类错误通常是因为你在代码中尝试访问一个不存在的属性。在你的例子中&#xff0c;错误提示表明 UserResource 类中没有名为 ID 的属性。这可能是由以下几个原因造成的&#xff1a; 拼写错…

对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡

对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡 在科技飞速发展的当下&#xff0c;鸿蒙 Next 系统无疑成为了众多科技爱好者与行业人士关注的焦点。今日&#xff0c;卓伊凡便收到这样一个饶有趣味的问题&#xff1a;鸿蒙 Next 系统究竟需要多长时间才能完全成熟&#xff…

快速上手GO的net/http包,个人学习笔记

更多个人笔记&#xff1a;&#xff08;仅供参考&#xff0c;非盈利&#xff09; gitee&#xff1a; https://gitee.com/harryhack/it_note github&#xff1a; https://github.com/ZHLOVEYY/IT_note 针对GO中net/http包的学习笔记 基础快速了解 创建简单的GOHTTP服务 func …

AI-Browser适用于 ChatGPT、Gemini、Claude、DeepSeek、Grok的客户端开源应用程序,集成了 Monaco 编辑器。

一、软件介绍 文末提供程序和源码下载学习 AI-Browser适用于 ChatGPT、Gemini、Claude、DeepSeek、Grok、Felo、Cody、JENOVA、Phind、Perplexity、Genspark 和 Google AI Studio 的客户端应用程序&#xff0c;集成了 Monaco 编辑器。使用 Electron 构建的强大桌面应用程序&a…

Dify框架面试内容整理-Dify如何处理知识库的集成?

Dify 在知识库集成方面采用了“检索增强生成(RAG)”的技术架构,核心实现思路如下: 一、知识库集成的整体流程 Dify处理知识库集成通常包括以下关键步骤: 文档上传↓

Laravel 模型使用全局作用域和局部作用域

一. 需要解决什么问题 最近Laravel 项目中遇到一个需求&#xff0c;我有一个客户表&#xff0c;每个员工都有自己的客户&#xff0c;但是自己只能看自己的客户。 项目中&#xff0c;有很多功能需要查询客户列表&#xff0c;客户详情&#xff0c;查询客户入口很多&#xff0c;…

【Nova UI】十二、打造组件库之按钮组件(上):迈向功能构建的关键一步

序言 在上一篇文章中&#xff0c;我们深入探索了 icon 组件从测试到全局注册的全过程&#x1f3af;&#xff0c;成功为其在项目中稳定运行筑牢了根基。此刻&#xff0c;组件库的建设之旅仍在继续&#xff0c;我们将目光聚焦于另一个关键组件 —— 按钮组件。按钮作为用户与界面…

鸿蒙OSS文件(视频/图片)压缩上传组件-能够增删改查

一、鸿蒙实现处理-压缩上传整体代码处理逻辑 转沙箱压缩获取凭证并上传文件 文件准备&#xff08;拿到文件流&#xff09;获取上传凭证&#xff08;调接口1拿到file_name和upload_url&#xff09;执行文件上传&#xff08;向阶段2拿到的upload_url上传文件&#xff09;更新列表…

河道流量监测,雷达流量计赋能水安全智慧守护

在蜿蜒的河道之上&#xff0c;水流的脉搏始终与人类文明的兴衰紧密相连。从农田灌溉的水量调配到城市防洪的精准预警&#xff0c;从生态保护的水质溯源到水资源管理的决策&#xff0c;河道流量监测如同大地的 “血管检测”&#xff0c;是守护水安全的第一道防线。传统监测手段在…

CSS3 基础(边框效果)

一、边框效果 属性功能示例值说明border-radius创建圆角border-radius: 20px;设置元素的圆角半径&#xff0c;支持像素&#xff08;px&#xff09;或百分比&#xff08;%&#xff09;。值为 50% 时可变为圆形。box-shadow添加阴影box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.5)…

零基础小白如何上岸数模国奖

零基础小白如何上岸数模国奖 我自己本人第一次参加数模国赛顺利上岸国奖&#xff0c;当然那段经历也是比较痛苦了&#xff0c;差不多也是从当年四月开始接触数学建模&#xff0c;第一次参加妈妈杯成绩并不理想&#xff0c;后面不断参加数模比赛进行模拟&#xff0c;最后顺利上岸…

SQL学习-常用函数

常见SQL函数使用 &#xff08;注意&#xff1a;不同的数据库类型使用的语法不同&#xff09; 以下是MySQL和PostgreSQL在实现替换、抽取、拼接、分列四个常见字符串操作功能时的核心区别总结&#xff0c;按功能分类对比&#xff1a; 1. 替换&#xff08;Replace&#xff09; …

rt-linux下的cgroup cpu的死锁bug

一、背景 rt-linux系统有其非常大的实时性的优势&#xff0c;但是与之俱来的是该系统上有一些天然的缺陷。由于rt-linux系统允许进程在内核态执行的逻辑里&#xff0c;在持锁期间&#xff0c;甚至持spinlock锁期间&#xff0c;都能被其他进程抢占。这一特性能带来实时性的好处…