《Redis设计与实现》第二章 简单动态字符串

redis没有使用C语言的传统以空字符结尾的字符数组,而是自己构建了simple dynamic string SDS类型。

C字符串只会用在一些无需对字符串值修改的地方比如打印日志。

2.1 SDS的定义

-w731
-w738

2.2 SDS 与 C字符串的区别。

1、C字符串最后一个元素总是‘\0’

2.2.1 常数复杂度获取字符串长度

有len位

2.2.1 杜绝缓冲区溢出

由于没有记录未使用空间以及长度,当拼接字符串的时候容易造成缓冲区的溢出。

2.2.3 减少修改字符串时带来的内存重分配次数

在C语言串中append或者trim操作都会为字符串重新分配内存,但是sds实现了预分配惰性空间两种优化策略。
1、对sds操作之后,len小于1MB就分配同样大小的 + 1
2、超过了1MB那就将len编程30MB 分配1MB未使用空间

惰性空间释放就是:free属性记录字节的数量,冰灯将来使用,不立马重新分配回收缩短后多出来的字节。

2.2.4 二进制安全

-w749

2.2.5 兼容部分C字符串函数

-w744

2.2.6 总结

-w771

2.3 SDS API

-w764
-w741

2.4 重点回顾

1、redis会用C字符串作为字面量,大多数用sds可以常数时间获取长度、杜绝缓冲区溢出、减少修改字符串长度所需的内存重分配次数、二进制安全、兼容部分C字符串函数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值