1 | Redis 基础数据结构 SDS

在 redis 中,保存基础的字符串的数据结构为 Simple Dynamic String(SDS),它是一个对 C 语言中字符串的包装结构。在 C 语言中,用 char[] str 来声明一个字符串,且每个字符串都以 结尾,一些字符串操作函数,都以 作为字符串的结束标识符。而 SDS

在 redis 中,保存基础的字符串的数据结构为 Simple Dynamic String(SDS),它是一个对 C 语言中字符串的包装结构。在 C 语言中,用 char[] str 来声明一个字符串,且每个字符串都以 \0 结尾,一些字符串操作函数,都以 \0 作为字符串的结束标识符。而 SDS 则作为一个结构体,包含了长度(len)、空闲(free)以及字符串(char[])。

SDS概览

定义

比 C 字符串多含有 len、free 字段的结构体。

struct sdshdr {
    // buf 中已占用空间的长度
    int len;
    // buf 中剩余可用空间的长度
    int free;
    // 数据空间
    char buf[];
};

实际长度:len + free + 1

可用长度:free

字符串长度:len,不包括空字符 \0

SDS结构示意图

与C字符串的区别

主要操作API

Read more

容器镜像(4):镜像的常用工具箱

容器镜像(4):镜像的常用工具箱

前几篇在讲多架构镜像时已经用过 skopeo 和 crane 做镜像复制,这篇系统整理这两个工具的完整能力,同时介绍几个日常操作镜像时同样好用的工具。 一、skopeo:不依赖 Daemon 的镜像瑞士军刀 skopeo 的核心价值是绕过 Docker daemon,直接与 Registry API 交互。上一篇用它做镜像复制和离线传输,但它的能力远不止于此。 1.1 安装 # Ubuntu / Debian sudo apt install -y skopeo skopeo --version # skopeo version 1.15.1 1.2 inspect:免拉取检查镜像元数据 docker inspect 需要先把镜像拉到本地,skopeo inspect 直接向 Registry

容器镜像(3):多架构镜像构建

容器镜像(3):多架构镜像构建

一、什么是多架构镜像 1.1 OCI Image Index 上一篇介绍了单平台镜像的结构:一个 Manifest 指向 Config 和若干 Layer blob。多架构镜像在此之上多了一层——OCI Image Index(也叫 Manifest List),是一个轻量的索引文件,把多个单平台 Manifest 组织在一起: $ docker manifest inspect golang:1.22-alpine { "schemaVersion": 2, "mediaType": "application/vnd.oci.image.index.v1+json", "manifests&

容器镜像(2):containerd 视角下的镜像

容器镜像(2):containerd 视角下的镜像

一、为什么需要了解 containerd 如果你只用 docker run 跑容器,从来不关心底层,那可以不了解 containerd。但如果你在用 Kubernetes,或者想真正理解"容器运行时"是什么,containerd 是绕不开的。 事实上,当你执行 docker run 的时候,containerd 早就在后台悄悄工作了——Docker 从 1.11 版本开始,就把核心运行时剥离出来交给 containerd 负责。 1.1 Docker 的架构演变 早期的 Docker(1.10 及之前)是一个"大一统"的单体程序:一个 dockerd