redis字符串若干记录

embedded/2024/9/23 9:33:38/

1、字符串

redis字符串支持二进制安全、redis中的健都为字符串类型、redis中所有的健和值都为redisObject变量

  • SDS
len:已用字节长度
alloc:已申请字节长度
flag:低三位代表sdshdr类型
buf:字符串内容
- 根据len判断SDS的类型 (SDS_TYPE_5 || SDS_TYPE_8|| SDS_TYPE_16|| SDS_TYPE_32|| SDS_TYPE_64)- SDSHDR5存放字节长度小于32(2的5次方)- SDS可以在常数时间内获取字符串的长度,并使用预分配内存机制减少内存拷贝次数。
  • SDS扩容机制

    • 1、判断当前长度是否符合要求,由于sdshdr.len记录了字符长度,时间复杂度为O(1)

    • 2、预分配比参数要求多的空间,新的长度若小于SDS_MAX_PREALLOC(1024*1024),则新长度扩容2倍,否则+SDS_MAX_PREALLOC

    • 3、扩容后重新计算sdshdr类型

    • 4、如果还是同一类型,则使用s_realloc函数申请内存;否则由于sds类型已经变动,需要移动整个sds,直接分配新的内存。

    • 5、更新alloc属性

字符串编码

  1. OBJ_ENCODING_EMBSTR(长度大于或小于OBJ_ENCODING_EMBSTR_SIZE_LIMIT=44字节)
    1. redis针对短字符串的优化,内存申请和释放只需要一次内存操作
    2. redisObject、sdshdr结构保存在一块连续的内存中,减少内存碎片
  2. OBJ_ENCODING_RAW(大于OBJ_ENCODING_EMBSTR_SIZE_LIMIT=44字节)
    1. redisObject、sdshdr结构保存在不同的内存中
  3. OBJ_ENCODING_INT
    1. 将数值字符串转换为整型,降低占用的内存空间
      1. 如:“123456789012“占用了12字节,在redistribution中转换为long类型,只用8字节。
      2. redis保存字符串时,会尝试将字符串转换为OBJ_ENCODING_INT,不行则根据长度保存为OBJ_ENCODING_EMBSTROBJ_ENCODING_RAW
  4. 这三种编码为的是尽可能地节省内存

http://www.ppmy.cn/embedded/97456.html

相关文章

KBL406-ASEMI、AI智能专用整流桥KBL406

编辑:ll KBL406-ASEMI、AI智能专用整流桥KBL406 型号:KBL406 品牌:ASEMI 封装:KBL-4 批号:2024 现货:50000 正向电流(Id):4A 反向耐压(VRRM&#xff…

【查看各个组件的版本信】

文章目录 MariaDBElasticsearchHadoopClickhouseKafkaZookeeperRedisLogstashFlinkSparkJDKPythonNacos 查看各个组件的版本信息通常可以通过命令行工具或 Web 界面来实现。以下是查看这些组件版本的常用方法: MariaDB mariadb --version或 mysql --versionElasti…

有关缓存的一些面试知识

1、讲一讲Redis各种数据类型与底层实现 底层数据结构一共有 7 种,分别是简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组、快速列表。它们和数据类型的对应关系如下图所示 String 类型的底层实现只有一种数据结构,也就是简单动态字符串。而…

机器学习的定义

机器学习 机器学习的定义 机器学习是人工智能的一个分支,它使计算机系统能够从经验中学习并改进,而无需进行明确的编程。机器学习算法分析和解释数据,然后使用该数据来做出预测或决策,随着时间的推移,它们会变得更加准…

【计算机网络】CIDR无分类编址知识学习

文章目录 1、CIDR引入的背景2、CIDR是什么?2.1 CIDR的2个特点2.2 CIDR斜线记法注意区分细节2.3 路由聚合or构成超网2.4 CIDR里面的掩码(不是叫子网掩码)2.5 CIDR几种等效的记法形式2.6 对于”网络前缀“不是8的整数倍时候,要多加注意 3、CIDR…

Maven继承和聚合特性

目录 Maven继承关系 1.继承概念 父POM 子模块 2.继承机制 3.示例 4.继承作用 背景 需求 5.注意事项 Maven聚合关系 1. 定义与概念 2. 实现方式 3. 特性与优势 4. 示例 5. 注意事项 Maven继承关系 1.继承概念 Maven 继承是指在 Maven 的项目中,定义…

原型与原型链与继承

原型、原型链与继承 构造函数 构造函数创建实例的过程 1.创建一个新对象 2.将空对象的__proto__指向构造函数的原型 3.修改构造函数中this指向,将构造函数中的this指向实例对象,执行构造函数中的代码,给这个新对象添加属性和方法&#x…

【Hot100】LeetCode—56. 合并区间

目录 1- 思路贪心 2- 实现⭐56. 合并区间——题解思路 3- ACM 实现 原题连接:56. 合并区间 1- 思路 贪心 1- 先对数组根据首元素排序2- 遍历数组,根据 left 和 right 维护一个左右区间。判断是否重叠 不重叠:收集结果重叠:更新 r…