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

【redis 第七篇章】动态字符串

一、概述

string 类型底层实现的简单动态字符串 sds,是可以修改的字符串。它采用预分配冗余空间的方式来减少内存的频繁分配。

二、SDS动态字符串

在这里插入图片描述

动态字符串 是以 \0 为分隔符。最大容量 是 redis 主动分配的一块内存空间,实际存储内容 是具体的存的数据。

三、SDS(动态字符串)与 c语言 字符串的区别

1、获取存储长度不同

c语言:c语言不记录长度信息,如果要获取字符串的长度,需要遍历所有的字符串,才能获取字符串的长度。获取长度的复杂度为 O(n)

sds(动态字符串):sds存储了字符串的长度,获取长度的复杂度为 O(1)

2、缓存溢出

c语言:c语言不记录长度,在执行strcat函数时,假设分配了内存,存储的内容比已经分配的内存多时,这个时候就会出现缓冲区溢出现象。

sds(动态字符串):sds存储内容时,先检查内容的存储是否能够存储下实际的值,如果不能存储实际的值,就先扩展缓存区域,再将值存储到缓冲区域中。

3、内存的开辟和释放

c语言:需要自己主动释放或者扩展内存,如果不能够主动释放或者扩展内存,就会出现缓冲溢出或者泄露。
sds(动态字符串):sds采取下面的方式

// 空间预分配 先进行内存区域进行扩展,然后在执行下面的代码
public void  test(){if(len < 1M){//程序分配和len属性一样的大小未使用的空间。} else if (len > 1M){//程序分配1M 未使用的空间。}
}// 惰性空间释放 
// 在修改字符串时,如果实际的内容要比老的数据小,先不将缓冲区的空闲内存释放掉,等下次存储内容时再进行空间的释放或者扩展。

4、二进制安全

c语言:C语言必须存储指定的格式数据。
sds(动态字符串):SDS不会对数据限制。

http://www.lryc.cn/news/415076.html

相关文章:

  • rk3588 部署yolov8.rknn
  • 【正点原子i.MX93开发板试用连载体验】中文提示词的训练
  • WordPress资源下载类主题 CeoMax-Pro_v7.6绕授权开心版
  • 使用GCC编译Notepad++的插件
  • 技术周总结 2024.07.29 ~ 08.04周日(MyBatis, 极限编程)
  • C语言调试宏全面总结(六大板块)
  • unity万向锁代数法解释
  • stm32入门学习10-I2C和陀螺仪模块
  • GDB常用指令
  • Nginx 高级 扩容与高效
  • pythonflaskMYSQL自驾游搜索系统32127-计算机毕业设计项目选题推荐(附源码)
  • C++ vector的基本使用(待补全)
  • Java 属性拷贝 三种实现方式
  • Java-变量,运算符,输入与输出
  • 五、一个quad同时支持pcie和sfp两种高速接口的ref时钟配置
  • AI辅助教育:九章大模型的数学辅导功能解析
  • 力扣刷题之3128.直角三角形
  • OD C卷 - 机场航班调度
  • uni-app中使用支付宝扫码插件并且在真机调试时使用(详细教程)
  • 每日学术速递8.5—1
  • 1、操作系统相关概念
  • 【ModelSim】仿真问题记录
  • 如何提高深度学习中数据运行的稳定性
  • 【连续数组】python刷题记录
  • JavaScript青少年简明教程:DOM和CSS简介
  • 架构师知识梳理(一):计算机硬件
  • 从根儿上学习spring 四 之run方法启动第一段
  • 智能闹钟如何判断用户已经醒了?
  • 【算法】动态规划解决背包问题
  • day09 工作日报表