Redis SDS 数据结构
2022/3/3 19:16:14
本文主要是介绍Redis SDS 数据结构,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
redis SDS 3.0
len 已经使用空间长度free 未使用空间长度char[] buf 字符数组,保存数据,末尾和c语言字符串一样添加‘\0’
1.空间预分配
当数据小于1MB时,扩展数据,这个时候buf数组会产生一个和len长度一样的free空间, buf占用空间为 len + free + 1例如:'redis' buf占用6字节 'r','e','d','i','s','\0' 扩展之后增加 hello 占用21字节空间 buf数组为 'r','e','d','i','s','h','e','l','l','0','\0',null,null,null,null,null,null,null,null,null,null len 为 10 free 为 10
增加字符串"abcd" buf数组为 'r','e','d','i','s','h','e','l','l','0','a','b','c','d','\0',null,null,null,null,null,null len 为 14 free 为 6
当数据大于1MB时,扩展数据,这个时候buf数组最多产生1MB的free空间
例如:数据有10MB +10mb数据 空间占用20MB+1MB+1kb
2.惰性空间释放
buf数组为 'r','e','d','i','s','h','e','l','l','0','a','b','c','d','\0',null,null,null,null,null,nulllen 为 14free 为 6
去掉字符'e' buf数组为 'r','d','i','s','h','l','l','0','a','b','c','d','\0',null,null,null,null,null,null,null,null len 为 12 free 为 8 占用空间不变,同时redis提供释放空间API
3.二进制安全
因为c语言是根据空字符来判断末尾的,所以c语言的字符串不能包含'\0',SDS有len长度,可以避免这个问题,SDS是把所有数据都按照二进制来处理的
redis sds 3.2 之后
len 字符串长度
alloc 分配的空间长度
flags sds类型 5种类型 sdshdr5 sdshdr8 sdshdr16 sdshdr32 和 sdshdr64
buf[] 字节数组
根据数据大小判断哪一种SDS类型,节省空间
这篇关于Redis SDS 数据结构的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-08阿里云Redis项目实战入门教程
- 2024-11-08阿里云Redis资料:新手入门与初级使用指南
- 2024-11-08阿里云Redis教程:新手入门及实用指南
- 2024-11-07阿里云Redis学习入门:新手必读指南
- 2024-11-07阿里云Redis学习入门:从零开始的操作指南
- 2024-11-07阿里云Redis学习:初学者指南
- 2024-11-06阿里云Redis入门教程:轻松搭建与使用指南
- 2024-11-02Redis项目实战:新手入门教程
- 2024-10-22Redis入门教程:轻松掌握数据存储与操作
- 2024-10-22Redis缓存入门教程:快速掌握Redis缓存基础知识