Redis常用数据结构之字符串

Redis使用SDS(Simple Dynamic String)而非C语言的字符数组实现字符串,以提高安全性、效率和功能。SDS与C字符串的主要区别在于:SDS存储长度信息,获取长度更快;避免缓冲区溢出问题;采用空间预分配和惰性空间释放策略减少内存分配次数;并支持二进制安全的存储。
摘要由CSDN通过智能技术生成

前言

你要是问我,在程序世界中我们程序员打交道最多的一种数据类型是什么?

我肯定会回答你是 字符串

那么在Redis中是如何实现的这种字符串数据结构呢?在Java中我们有 java.lang.String类,在C语言中通过char[]字符数组实现的字符串,总所周知Redis是由C语言实现的,那么Redis中的字符串就是通过C语言的char[]字符数组实现的吗?

不是的,Redis是通过一个名叫SDS(Simple Dynamic String)简单动态字符串实现的

接下来,我们就来研究研究,为什么不直接使用C字符串,而是要在实现一套Redis自己的字符串数据结构。请系好安全带,马上发车!

什么是SDS

代码定义

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

上面这个名为sdshdr的结构体就是Redis中SDS的定义,很简单的对吧

下面使用两幅插图,形象的展示一下SDS中存放数据的时候是个什么样子的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值