在眼下版本号的 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 会为追加操作进行优化:加快追加操作的速度。并减少内存分配的次数,代价是多占用了一些内存。并且这些内存不会被主动释放。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架