redis string底层数据结构sds
2018-01-04 14:21
393 查看
redis的string没有采用c语言的字符串数组而采用自定义的数据结构SDS(simple dynamic string)设计
len 为字符串的实际长度 在redis中获取字符串的key长度的时间复杂度为O(1)
free 为 buf数组中剩余的空间大小
buf 保存字符串的数组
使用free杜绝了缓冲区溢出如果free的长度不够值的长度则自动会开辟len长度的空间
redis使用改数据结构的优点
1:空间可以预分配
2:惰性空间释放(使某个键的长度变小时内存不是立即回收而是增加free的大小)
3:二进制安全(redis不是采用c语言字符串的以\0来判断字符串结束 而sds通过判断len的长度是否为0来判断字符串的长度)
4:redis实际开辟的空间为len+free
len 为字符串的实际长度 在redis中获取字符串的key长度的时间复杂度为O(1)
free 为 buf数组中剩余的空间大小
buf 保存字符串的数组
使用free杜绝了缓冲区溢出如果free的长度不够值的长度则自动会开辟len长度的空间
redis使用改数据结构的优点
1:空间可以预分配
2:惰性空间释放(使某个键的长度变小时内存不是立即回收而是增加free的大小)
3:二进制安全(redis不是采用c语言字符串的以\0来判断字符串结束 而sds通过判断len的长度是否为0来判断字符串的长度)
4:redis实际开辟的空间为len+free
相关文章推荐
- ssdb底层实现——ssdb底层是leveldb,leveldb根本上是skiplist(例如为存储多个list items,必然有多个item key,而非暴力string cat),用它来做redis的list和set等,势必在数据结构和算法层面上有诸多不适
- Redis源码分析(1)-底层数据结构SDS
- redis底层数据结构之sds
- redis系列笔记之数据结构SDS
- Redis源码学习——简单动态字符串SDS(Simple Dynamic String)
- Redis 3.0 源码解析---底层数据结构分析(2)
- Redis 3.0 源码解析---底层数据结构分析(3)
- redis 列表的底层数据结构链表
- 深入浅出Redis-redis底层数据结构(上)
- redis的数据结构和对象(1.简单的动态字符串- simple dynamic string)
- redis底层数据结构之adlist
- 深入浅出Redis-redis底层数据结构(下)
- redis数据结构 - String 第二天
- 【Redis】redis 五种数据结构详解(string,list,set,zset,hash)
- Redis内部数据结构详解之简单动态字符串(sds)
- Redis数据结构底层知识总结
- 学习笔记-Redis设计与实现-简单动态对象(simple dynamic string, SDS)
- Redis数据结构之sds基本操作函数
- Redis数据库底层数据结构设计
- redis数据结构-sds