Redis中的string类型
首先声明,以下内容全部为学习黄建宏老师《Redis设计与实现》一书中知识的摘抄及总结。
redis作为一个典型K-V数据库,它的速度之快令人咂舌。那么为什么redis会比较快呢?不知道你有没有想过这个问题。
redis中存储数据有很多处于自身的考虑,比如redis中的所有key都是string类型,而redis中的string又对C语言中的string进行了加工——>SDS
一、什么叫做SDS?
SDS
是simple dynamic string
的缩写,意为简单动态字符串。
那么redis为什么要自己实现SDS,而不使用C语言中的string呢?
首先SDS
遵守了C
语言string
以空字符串结尾的管理,这样做的好处是,SDS
可以延续使用C-string
中的一些函数,比如append
等函数,这样就不需要针对某个业务场景来单独封装函数,提供使用端使用
除了以上的情况,那么redis还有什么理由选择使用SDS?
1、空间换取时间
-
C-string获取字符串长度
假设需要获取一个
string
key的长度时,使用c-string
,需要遍历整个字符串,直到遇到代表字符串结尾的空字符串时才能获取到整个字符串元素的长度。 -
SDS 获取字符串长度
和C-string不一样的是,
redis
中的SDS
自身有很多属性,它在len
属性中记录了SDS
本身的长度,如果使用SDS
进行上面那个检测时,可以直接获取字符串key的长度了
这只是一个小的举例,C-string
需要遍历所有元素才能获取字符串长度,时间复杂度是O(N),而SDS
可以直接获取字符串的长度,时间复杂度仅为O(1),从一定程度上保证了获取字符串长度的工作不会成为Redis的性能瓶颈
2、解决的缓冲区溢出
明日继续输出,现在太晚了。2021年08月22日23:15:03