Redis 数据结构(一)—— 简单动态字符串(SDS 和 C字符串的区别)
2021/12/28 2:09:09
本文主要是介绍Redis 数据结构(一)—— 简单动态字符串(SDS 和 C字符串的区别),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 1. SDS 的定义
- 2. SDS和C字符串的区别
- 3. SDS API
1. SDS 的定义
简单动态字符串大概是下边这个鬼样子,储存了下边这些东西:
- 已有字符串长度
- buff空闲的长度
- buff字符数组
2. SDS和C字符串的区别
至于SDS和C字符串的区别,我们先来个表吧,先大概看一看,然后一条一条的解释。
-
获取字符串多长更快了!
这个解释起来简单,SDS结构体里存了当前字符串的长度,直接读就行,时间复杂度为O(1),而C字符串没存长度,统计长度的时候要把字符串从头到尾的遍历一遍,时间复杂度O(n)。 -
不会有缓冲区溢出!
这个也好解释,对于C字符串进行字符串拼接的时候,不检查空间够不够,直接就是干,把一堆字符串就放在当前字符串后边了。那要是原来字符串后边有其他字符串就完蛋了,把别人整坏了!!而对于SDS而言,在对当前字符串进行修改时会检查空间够不够啊,不够就在给分点,保证了修改操作不会有溢出问题。 -
修改字符串长度不会老分配内存!
这个也不难,刚才咱们说了,直接修改C字符串可能会产生溢出,所以呢,想要保证不溢出,这个事情就得甩锅到程序员身上。只要我们进行修改就得重新给他分配足够的空间,不用了就得释放掉。那SDS就比较nb了,他自己来做这些事儿,我们开始的时候介绍了free这个属性,这就说明了他自己给自己的内存分配不是正好的,可能会有富裕,这样一来我们做字符串修改的时候就不用每次都进行内存分配了。(其实,具体的的机制有两种 1. 空间预分配 2. 空间惰性释放) -
二进制安全!
C字符串只能保存文本数据(文本转成某种编码),那如果我们读的时候编码搞错了,就会读到一堆乱码。。。还有就是C字符串认为空格就结束了,例如我们保存“I Love U”,他就只会保存“I”,也不知道你爱谁。而SDS就比较nb了,他可以直接保存二进制信息,什么音频视频杂七杂八都能存了,而且因为他有当前字符长度所以也不吧空格当成结束了。 -
兼容部分C字符串函数!
这个就不对逼逼了,SDS字符串是在原有C字符串上改的,又不是创造的,能用很正常!
3. SDS API
接下来列出一些SDS常用的API吧!
好了,用户下单了得去送外卖了,明天见!
这篇关于Redis 数据结构(一)—— 简单动态字符串(SDS 和 C字符串的区别)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-30阿里云Redis教程:新手入门指南
- 2024-12-27阿里云Redis学习入门指南
- 2024-12-27阿里云Redis入门详解:轻松搭建与管理
- 2024-12-27阿里云Redis学习:新手入门指南
- 2024-12-24Redis资料:新手入门快速指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-24Redis资料:新手入门教程与实践指南
- 2024-12-07Redis高并发入门详解
- 2024-12-07Redis缓存入门:新手必读指南
- 2024-12-07Redis缓存入门:新手必读教程