zoukankan      html  css  js  c++  java
  • redis数据结构之SDS

    简介

    redis源码虽然是C语言实现的,但是Redis没有直接采用C语言传统的字符串表示,而是构建了一种名叫简单动态字符串(simple dynamic string,SDS)的抽象类型,并将SDS用作redis的默认字符串表示。

    SDS定义

    SDS定义的结构体如下:

    struct sdshdr{
    	//记录buf数组中已使用字节的数量,等于SDS所保存字符串的长度
        int len;
        //记录buf数组中未使用字节的数量
        int free;
        //字节数组,用于保存字符串
        char buf[];
    };
    

    下图展示了一个SDS示例:

    • free值为0,表示这个SDS没有任何未使用的空间
    • len值为5,表示这个SDS保存了一个5个字节的字符串
    • buf是一个字节数组,保存字符串的值,并且遵循C语言中已空字符串结尾的惯例,最后一个字节保存空字符''。

    SDS与C字符串的区别

    • 常数复杂度获取字符串长度:
    • 杜绝缓冲区溢出
    • 减少修改字符串时带来的内存重分配次数(空间预分配和惰性空间释放)
    • 二进制安全
    • 兼容部分C字符串函数
  • 相关阅读:
    Git 常用命令大全-转载
    Powershell重命名文件夹
    C#使用qq邮箱发送邮件
    iOS开发-YUV颜色格式
    iOS开发小记(十一)
    iOS开发-AFNetworking
    iOS开发-NSURLSession
    iOS开发-类的加载load函数和initialize函数
    iOS开发-调试(debug)
    iOS开发-graphics
  • 原文地址:https://www.cnblogs.com/junjiang3/p/11448358.html
Copyright © 2011-2022 走看看