• 第2章 简单动态字符串


    2.1 SDS

      SDS(Simple Dynamic String在Redis里被用作动态字符串的实现。,是一个包含char数组的结构体。

    • free 空闲数组
    • len 已经使用的数组的长度
    • buf 具体保存数组的地方

    2.2 SDS与C字符串的区别

      C语言使用长度为N+1的字符数组来存储长度为N的字符串,Redis为了提高效率并没有采用这种策略

    • 提高获得字符串长度的效率即提高STRLEN的速度。 C语言字符串要想获得长度需要遍历整个数组 O(n),Redis只需要读取len存储的数值O(1)
    • 杜绝字符串拼接可能带来的内存溢出。拼接之前检查free的大小能否装得下需要拼上去的字符串,装不下就要重新分配
    • 灵活的空间分配策略减小在对字符串修改的时候内存空间申请与释放带来的消耗。空间预分配:当需要扩展SDS->buf数组的长度的时候,会预分配一定的冗余空间;惰性空间释放:SDS->buf出现空余的时候并不会回收,而是使用free记录下来便于下次使用
    • 二进制安全。SDS通过len的值来判断buf何时结束,因此即使保存的二进制数据中有结束字符也不会带来影响
    • 兼容部分C语言操作字符串的函数,因为SDS也使用'/0'作为结束标志

  • 相关阅读:
    MD文件利用标题等级进行分割代码实现
    IDEA插件-Git Commit Template
    IDEA插件-Translation
    IDEA使用-Debug回到上一步
    Java语法糖详解
    MySQL 事务的隔离级别初窥
    Java异常体系概述
    ssh-copy-id三步实现SSH免密登录
    深入理解ThreadLocal
    使用Guava RateLimiter限流入门到深入
  • 原文地址:https://www.cnblogs.com/AshOfTime/p/10616044.html
Copyright © 2020-2023  润新知