Redis数据类型的底层结构
2021/7/24 2:13:00
本文主要是介绍Redis数据类型的底层结构,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1、String
Redis构建的简单动态字符串(Simple Dynamic String),简称SDS
优点: 传统字符串(C字符串) SDS 1. 获取字符串长度的复杂度为O(N) 获取字符串长度的复杂度为O(1) 2. API 是不安全的,可能会造成缓冲区溢出 API 是安全的,不会造成缓冲区溢出 3. 修改字符串长度N次必然需要执行N次内存重分配 修改字符串长度N次最多执行N次内存重分配 4. 只能保存文本数据 可以保存二进制数据和文本文数据 5. 可以使用所有<String.h>库中的函数 可以使用一部分<string.h>库中的函数
1、C字符串通过遍历的方式来获取字符串的长度,O(n); SDS数据结构中存储了字符串长度,空余长度,数据空间,直接可获取字符串长度,O(1) struct sdshdr { int len;// buf 中已占用空间的长度 int free;// buf 中剩余可用空间的长度 char buf[];// 数据空间 }; 2、C字符串在进行字符串修改的时候,若修改后的字符串的长度大于原有的长度,此时又为及时修改空间长度,就会产生内存得溢出;而且每次进行字符串修改都要重新分配空间。 SDS进行修改时会有如下三步: 检查空间是否足够 若不足够则会,进行空间的开辟,开辟为新字符串的长度,将len改为新空间的大小 重新计算free空间大小,即将free改为新len的长度。 3、C字符串每次进行扩充和收缩时都要进行内存空间的分配,若修改后的长度大于原来的长度,此时未进行内存空间的分配,就会导致内存空间的泄露; SDS则不会在内次修改时会进行一次内存空间的判断,若上次扩展的空间足够这次字符的使用则不用进行空间扩展,这样分配空间的次数也会变少,效率也会变高。同时SDS提供了惰性空间释放的API可以防止一些无用空间的浪费。 4、c字符串只有一个空字符作为结束符,因此无法存储图片,音频,视频,压缩文件这样的二进制数据; SDS对空字符串没有要求,通过len属性来判断字符串的结束。
2、Hash
3、List
4、Set
5、SortSet
这篇关于Redis数据类型的底层结构的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-07Redis高并发入门详解
- 2024-12-07Redis缓存入门:新手必读指南
- 2024-12-07Redis缓存入门:新手必读教程
- 2024-12-07Redis入门:新手必备的简单教程
- 2024-12-07Redis入门:新手必读的简单教程
- 2024-12-06Redis入门教程:从安装到基本操作
- 2024-12-06Redis缓存入门教程:轻松掌握缓存技巧
- 2024-12-04Redis入门:简单教程详解
- 2024-11-29Redis开发入门教程:从零开始学习Redis
- 2024-11-27Redis入门指南:快速掌握Redis基础操作