Redis数据结构—字符串

Redis数据结构—字符串

redis是用c语言写的,一个内存key~value数据库,常用作缓存。redis的字符串类型叫做简单动态字符串simple dynamic string。结构主要包括三部分,int len,int free, char[] buf。len表示buf中字节数组长度,free表示还有多少字节可以用,buf存储字节数组,最后一个是终止字符"\0",表示当前的内容。他和普通的c字符串相比有几个好处:

1 通过len可以o1复杂度获取字符串大小

通过len可以o1复杂度获取字符串大小,而普通的c字符串需要遍及数据直到空字符串,也叫终止字符串,时间复杂度是o(n)。所以strlen方法复杂度是o(1)。

2 可以以二进制的形式存储任意数据

普通的c字符串不能存储空格等特殊字符串,如果包含了终止字符,后续的字符就会截断,而sds存储用的是字节数组,并且有len来表示数据长度

3 sds的api是安全的,不会照成缓冲区溢出和内存泄漏

内存泄漏是在截断字符串的时候,如果内存没有手动释放,就会泄漏。sds的api自动帮我们做了内存释放和获取的操作,我们不需要关心。

4 sds可以减少内存分配的次数,从必定n次到最多n次

如果在concat的时候,会有两种内存分配策略,增加的时候有内存预分配策略;减少的时候先不释放,只是把free增加,这样如果下次操作是增加就可能不需要分配了。
预分配策略,先增加必须的内存,然后如果增加后的len大于等于1mB,那么free等于1MB;如果增加后len小于1MB,那么free等于len。

5 重用c语言<string.h>库的部分代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值