sds(简单动态字符串) 内存预分配优化策略
2024-08-27 15:15:19
* 1024 ,
也就是说。 当大小小于 1MB 的字符串运行追加操作时,sdsMakeRoomFor 就为它们分配多于所需大小一倍的空间;
当字符串的大小大于 1MB 。 那么 sdsMakeRoomFor 就为它们额外多分配 1MB 的空间。
运行过 APPEND 命令的字符串会带有额外的预分配空间。
这些预分配空间不会被释放。 除非该字符串所相应的键被删除, 或者等到关闭 Redis 之后, 再次启动时又一次加载的字符串对象将不会有预分配空间。
由于运行 APPEND 命令的字符串键数量通常并不多,
占用内存的体积通常也不大。 所以这一般并不算什么问题。
还有一方面。 假设运行 APPEND 操作的键非常多。
而字符串的体积又非常大的话, 那可能就须要改动 Redis server。 让它定时释放一些字符串键的预分配空间。 从而更有效地使用内存。
小结
- Redis 的字符串表示为 sds 。而不是 C 字符串(以 \0 结尾的 char*)。
- 对照 C 字符串, sds 有下面特性:
- 能够高效地运行长度计算(strlen);
- 能够高效地运行追加操作(append);
- 二进制安全;
- sds 会为追加操作进行优化:加快追加操作的速度。并减少内存分配的次数,代价是多占用了一些内存。并且这些内存不会被主动释放。
最新文章
- potrace源码分析一
- UP Board 网络设置一本通
- iOS 开发快速导引:iOS 程序框架【草】
- Webstorm 10 for mac osx 注册机,序列号,kegen
- Largest Rectangle in Histogram
- json返回数据库的时间格式为/Date(1477294037000)/,怎样在前台进行格式化转换
- javascript 字符串相关知识汇总
- php操作redis常用方法源代码
- Linux Add a Swap File
- 利用Trie树对字符串集合进行排序并计算特征值
- python 自学笔记(四) 列表
- Struts学习之自定义结果集
- NodeJs的简单介绍
- POJ 2065 SETI [高斯消元同余]
- ELK学习笔记(五)简单搜索和DSL查询
- ThinkPHP简单的验证码实现
- Do-Now—团队冲刺博客三
- iCloud无法导入vCard问题。fix the error when import vcard/vcf to icloud.
- iis部署webservice问题集合
- Hdu2181 哈密顿绕行世界问题 2017-01-18 14:46 45人阅读 评论(0) 收藏