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

Redis原理

原理

Redis数据结构

动态字符串SDS

字符串是redis中非常常见的一个数据结构 redis是由C语言实现 但是底层并没有采用C语言的字符串类型 因为C语言字符串存在很多问题 C语言字符串底层是字符数组

  • 获取字符串长度需要运算 因为‘\0’的存在 所以每次获取长度都需要-1 会造成额外的运算
  • 非二进制安全 由于‘\0’的存在 所以写入的字符串也不能带有\0 会造成不安全的字符串
  • 不可修改 c语言对字符串的申请都是直接申请到常量池里 是不能修改的 而且拼接需要扩容 扩容就要重新申请空间 难以拼接

因此redis就构建了一种新的字符串结构 叫做SDS(Simple Dynamic String) 简单动态字符串
不过SDS底层也是字符串数组 但是SDS的字符数组是自己来维护的 然后SDS结构体声明了很多种 8字节 16字节 32,64字节 5字节的有但是已经被弃用了

SDS之所以叫动态字符串 具备动态扩容的能力 但是由于redis牵扯到模式切换 用户态和内核态切换导致申请内存性能占用太大 所以扩容是内存预分配方法扩容 就是会多申请一些空间

  • 如果新字符串小于1M 则新空间为扩展后的字符串长度的两倍+1
  • 如果新字符串大于1M 则新空间为扩展后的字符串长度+1M+1

SDS优势

  • 获取字符串长度时间是O(1)
  • 支持动态扩容
  • 减少内存分配
  • 二进制安全
http://www.njgz.com.cn/news/558.html

相关文章:

  • HTTP POST请求:初学者指南与示范
  • @Autowired 自动依赖注入
  • 基于接口划分vlan
  • 【AirSim】图像API的使用
  • CSS页面布局
  • switch 语句
  • 优秀书籍随记
  • Golang 文本模板,你指定没用过
  • @RestController
  • Django实时通信实战:WebSocket与ASGI全解析(下)
  • DP 优化——决策单调性优化
  • VS插件报错,g++却完美编译?API调用错因分析
  • 《构造之法》读后感
  • jpg的解码流程
  • Redisson分布式锁的用法
  • 推迟了十年终于搞定/纯Qt实现onvif设备模拟器/虚拟监控摄像头/批量模拟几千路/电脑桌面转onvif
  • 关于SqlSugar并发情况下的问题(排坑)
  • 基于循环谱分析的DSSS_BPSK信号检测与码元速率估计
  • Windows 指令操作笔记
  • 2025.7.26学习日记【周六休息内容比较少】
  • [Tools] Generate project structure tree
  • dp Trick 之:斜率优化
  • 第一天学习使用
  • dp Trick 之:矩阵快速幂预处理(未完成)
  • 【whk】【合集】历年各大学数学强基题
  • 面向数据科学的AI助手:SageMaker Canvas中的Amazon Q开发者工具
  • 001 - 介绍
  • 【jstack】使用jstack排查Java问题
  • 多线程(续)
  • 华为云-盘古安全护栏