zoukankan      html  css  js  c++  java
  • Redis 设计与实现笔记

    Redis 中的字符串没有使用 C语言中的字符指针(char *),而是使用了自定义的结构 sds。

    文件:

    sds.h  sds.c

    结构:

    struct sdshdr {
        
        int len; // 填充的字符串长度
        
        int free;  // buf 中未填充的空位置
        
        char buf[];  // 用于存放实际的字符串(包含为使用的空间),以 '' 结尾
    };

    基本结构如上所示,其中 buf 中为预分配的字符串空间,可能等于实际字符串所需空间长度,也可能大于实际的字符串长度

    len 为实际的字符串长度,这样可以很方便的获取到字符串的长度,

    free 为 buf 数组中为使用到的数组长度,可以防止数组越界

    同时,文件中还维护了一个指针

    typedef char *sds;  // 类型别名,实例指向数据结构中的 buf 空间

    一般操作返回的都是这个指针,如果要获取整个sds,需要将指针向前移动 sizeof(struct sdshdr)个字节来获取到结构开头地址(void *),之后强转为 sdshdr 结构体指针

    struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr)));
  • 相关阅读:
    有进度条圆周率计算
    turtle库的学习笔记(python)
    Vue框架流程图(精简版)
    Linux基础流程图(精简版)
    基于python的爬虫流程图(精简版)
    crm业务流程图(精简版)
    Django流程图(精简版)
    JavaScript流程图(精简版)
    css流程图
    select和epoll
  • 原文地址:https://www.cnblogs.com/zawier/p/10201098.html
Copyright © 2011-2022 走看看