首页 > 代码库 > sds(简单动态字符串) 内存预分配优化策略
sds(简单动态字符串) 内存预分配优化策略
在眼下版本号的 Redis 中, SDS_MAX_PREALLOC 的值为 1024 * 1024 , 也就是说。 当大小小于 1MB 的字符串运行追加操作时,sdsMakeRoomFor 就为它们分配多于所需大小一倍的空间; 当字符串的大小大于 1MB 。 那么 sdsMakeRoomFor 就为它们额外多分配 1MB 的空间。
运行过 APPEND 命令的字符串会带有额外的预分配空间。 这些预分配空间不会被释放。 除非该字符串所相应的键被删除, 或者等到关闭 Redis 之后, 再次启动时又一次加载的字符串对象将不会有预分配空间。
由于运行 APPEND 命令的字符串键数量通常并不多, 占用内存的体积通常也不大。 所以这一般并不算什么问题。
还有一方面。 假设运行 APPEND 操作的键非常多。 而字符串的体积又非常大的话, 那可能就须要改动 Redis server。 让它定时释放一些字符串键的预分配空间。 从而更有效地使用内存。
小结
- Redis 的字符串表示为 sds 。而不是 C 字符串(以 \0 结尾的 char*)。
- 对照 C 字符串, sds 有下面特性:
- 能够高效地运行长度计算(strlen);
- 能够高效地运行追加操作(append);
- 二进制安全;
- sds 会为追加操作进行优化:加快追加操作的速度。并减少内存分配的次数,代价是多占用了一些内存。并且这些内存不会被主动释放。
sds(简单动态字符串) 内存预分配优化策略
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。