reids设计与实现(一)——数据对象-2. redis 动态字符串

时间:2024-03-10 11:55:18

字符串作为redis最为核心,最为常用的数据类型,后面我们称sds,我们深入了解一下。

2.1. 字符串的数据结构:

在这里插入图片描述我们从数据结构入手,猜测字符串实现的功能和特性,我们可以发现,这里相比于c字符串多了两个属性。freelen

2.2. 剖析,length;

  1. 快速获取length :首先,leng最简单的效果便是可以直接获取redis字符串的长短,由于是直接获取属性,时间复杂度为O(1)。

  2. 二进制安全: 除了获取长度外,为了实现redis的sds可以存储任意数据的功能,sds通过length判断字符串是否到结尾,这和c字符串不同(‘/0’),因此可以存储任意二进制数据。

2.3. 剖析,free;

其实简单length之后发现基本功能都差不多了,那么这个free有什么作用呢?

  1. 预留free空间: 减少重新分配,在sds除了记录length之外,还会分配一倍length(1mb大小以内)的未使用空间,如果length在再次增加的情况下,不过增加的长度小于free,则不需要重新分配内存。

2.3. 使用c字符串函数;

redis虽然自行实现了字符串数据机构,但是还是在字符串末尾增加一个’/0’空字符,目的是为了使用c字符串的函数。