Redis中的string数据

Redis中的string类型

首先声明,以下内容全部为学习黄建宏老师《Redis设计与实现》一书中知识的摘抄及总结。

redis作为一个典型K-V数据库,它的速度之快令人咂舌。那么为什么redis会比较快呢?不知道你有没有想过这个问题。

redis中存储数据有很多处于自身的考虑,比如redis中的所有key都是string类型,而redis中的string又对C语言中的string进行了加工——>SDS

一、什么叫做SDS?

SDSsimple dynamic string的缩写,意为简单动态字符串。

那么redis为什么要自己实现SDS,而不使用C语言中的string呢?
首先SDS遵守了C语言string以空字符串结尾的管理,这样做的好处是,SDS可以延续使用C-string中的一些函数,比如append等函数,这样就不需要针对某个业务场景来单独封装函数,提供使用端使用

除了以上的情况,那么redis还有什么理由选择使用SDS?

1、空间换取时间
  • C-string获取字符串长度

    假设需要获取一个stringkey的长度时,使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值