- 1
- 0
- 约3.58千字
- 约 8页
- 2022-03-18 发布于浙江
- 举报
?
?
Redis设计与实现之SDS和RDB
?
?
1.数据结构与对象:
?
? ? Redis数据库里每个键值对都是由对象组成的,其中键总是一个字符串对象,值可以是字符串对象(String)、列表对象(List)、哈希对象(Hash)、集合对象(Set)、有序集合对象(ZSet)等对象的其中一种
?
? ? Redis采用SDS(简单动态字符串)作为字符串类型进行存储,相较C字符串类型来说,其优点明显且突出如下:
? ? 1.常熟复杂度获取字符串长度:
?? ??? ?无需像C字符串一般对字符串进行遍历后才能获取字符串长度,它拥有自己的len区域,当需要获取字符串长度时只需读取该字符串len属性O(1)就可简洁方便的拿到字符串长度,无需如像C字符串一般将所有字符进行遍历O(n)后才能获取
? ? 2.杜绝缓冲区溢出:
?? ??? ?很好的解决使用C字符串时产生的缓存区溢出问题,当需要进行字符拼接时,会先检查SDS的空间是否满足即将拼接字符串长度的大小,满足则拼接,如不满足就会自动扩展SDS的空间大小,使之能够装下拼接后的字符串,杜绝缓冲区溢出可能
? ? 3.减少修改字符串时带来的内存重新分配的次数:
?? ?? ? Redis通过空间预分配策略,来减少连续执行字符串增长所需的内存分配次数
?? ??? ??? ???空间预分配策略:
?? ?
原创力文档

文档评论(0)