redis SDS
来源:互联网 发布:编辑网页的软件 编辑:程序博客网 时间:2024/06/09 16:51
SDS
Redis在实现上使用了,自定义的SDS(simple dynamic string),来代替C语言传统的字符串表示方式。
- free 属性的值为 0 , 表示这个 SDS 没有分配任何未使用空间。
- len 属性的值为 5 , 表示这个 SDS 保存了一个五字节长的字符串。
- buf 属性是一个 char 类型的数组, 数组的前五个字节分别保存了 'R' 、 'e' 、 'd' 、 'i' 、 's' 五个字符, 而最后一个字节则保存了空字符 '\0' 。
SDS对比C语言传统的字符串有以下优点:
- 在常数时间复杂度获取字符串长度
因为在SDS结构中已经保存了字符串的长度信息,并且在修改字符串时,也会对其进行相应的修改,所以获取字符串长度,无需遍历整个字符串。 杜绝缓存区溢出
在C字符串中如果你要对一个字符串进行扩展的话,就必须预先计算空间,如果空间不足久,就需要再申请一些内存空间。但要是忘记了预先分配空间的话,就会参数缓存区溢出。而使用SDS的API会自动的帮你计算并分配空间,从而杜绝了缓存区溢出的可能。- 减少内存分配次数
相比于C字符串不记录长度信息,导致每次修改都需要进行内存重新分配(分配内存是一个相对耗时的系统调用) SDS就要灵活的多了,SDS的API通过 空间预先分配 和惰性空间释放 这两个方式去减少空间的重新分配,其中空间预先分配 是指当第一次对SDS字符串进行修改时,SDS不止分配足够的空间,而且会根据分配策略,多分配一些空间以备下次使用。惰性空间释放就是在缩短SDS字符串时仅仅删除字符内容,并不回收剩余的内存空间。 - 二进制安全
SDS 的 API 都是二进制安全的(binary-safe): 所有 SDS API 都会以处理二进制的方式来处理 SDS 存放在 buf 数组里的数据, 程序不会对其中的数据做任何限制、过滤、或者假设 —— 数据在写入时是什么样的, 它被读取时就是什么样。buf数组是字节数组,里面存储一系列的二进制数据。
0 0
- redis SDS
- Redis SDS
- Redis的sds
- redis 源码笔记--sds
- redis分析-SDS
- Redis 学习 ---- 2.SDS
- redis之sds
- Redis数据结构之SDS
- redis sds学习
- Redis源码解析【SDS】
- redis-SDS 分析
- redis--内部结构--sds
- Redis之SDS
- Redis数据结构-SDS
- redis sds.h文件分析
- redis源码分析-sds字符串
- redis 源码剖析 1 sds
- [Redis][数据结构]sds的学习
- aJax文本中包含&符号上传错误的解决方法
- CSS - 05 背景,文本相关属性,内边距,外边距
- 矩阵的快速取幂法——求类Fibonacci数列(2)
- UINavigationController全屏右滑返回
- 第三十三天学习笔记
- redis SDS
- nginx通配符哈希表
- ZABBIX实践(二) centos下的Agent端部署和安装
- Linux软件包管理器及rpm命令总结
- TextView使用
- HTTP请求
- HDU 5945 Fxx and game(dp+单调队列优化)
- JSP新闻系统之八 Servlet
- 大数据竞赛技术分享