zoukankan      html  css  js  c++  java
  • sds(简单动态字符串) 内存预分配优化策略



    在眼下版本号的 Redis 中, SDS_MAX_PREALLOC 的值为 1024 * 1024 , 也就是说。 当大小小于 1MB 的字符串运行追加操作时,sdsMakeRoomFor 就为它们分配多于所需大小一倍的空间; 当字符串的大小大于 1MB 。 那么 sdsMakeRoomFor 就为它们额外多分配 1MB 的空间。

    运行过 APPEND 命令的字符串会带有额外的预分配空间。 这些预分配空间不会被释放。 除非该字符串所相应的键被删除, 或者等到关闭 Redis 之后, 再次启动时又一次加载的字符串对象将不会有预分配空间。

    由于运行 APPEND 命令的字符串键数量通常并不多, 占用内存的体积通常也不大。 所以这一般并不算什么问题。

    还有一方面。 假设运行 APPEND 操作的键非常多。 而字符串的体积又非常大的话, 那可能就须要改动 Redis server。 让它定时释放一些字符串键的预分配空间。 从而更有效地使用内存。

    小结

    • Redis 的字符串表示为 sds 。而不是 C 字符串(以  结尾的 char*)。
    • 对照 C 字符串, sds 有下面特性:
      • 能够高效地运行长度计算(strlen);
      • 能够高效地运行追加操作(append);
      • 二进制安全;
    • sds 会为追加操作进行优化:加快追加操作的速度。并减少内存分配的次数,代价是多占用了一些内存。并且这些内存不会被主动释放。


  • 相关阅读:
    Ubuntu 18.04 LTS 启用BBR
    MySQL with JDBC <一>
    HTML 实录 <一>
    Nginx CloudFlare 客户端真实IP
    Ubuntu 16.04 释放升级到 18.04 后, man: command exited with status 4
    JSP 从入门到精通 <一>
    Nginx URL重写
    JavaScript 修改 CSS 伪类属性
    i-83.net quadhost子产品
    HTML 重定向 页面跳转
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6741800.html
Copyright © 2011-2022 走看看