Redis 学习 ---- 2.SDS


SDS:simple dynamic string,简单动态字符串,在 sds.h/sdshdr文件里

并且:AOF缓冲区、客户端状态中的缓冲区,都是SDS实现的

结构如下

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


SDS的优点:

1.O(1)获取字符串长度

2.杜绝缓冲区溢出

3.减少修改字符串时带来的内存重分配次数

    Redis作为数据库,经常被用于速度要求严苛、数据被频繁修改的场合

        1.空间预分配

        2.惰性空间释放

4.二进制安全

    不仅能保存文本数据,还能保存图像、音频、视频、压缩文件

5.兼容部分C字符串函数

    重用<string.h>库函数


C字符串与SDS的区别


                  C字符串                                                                         SDS

截取字符串长度的复杂度为O(N)                                截取字符串长度的复杂度为O(1)

API是不安全的,可能会造成缓冲区溢出                   API是安全的,不会造成缓冲区溢出

修改字符串长度N此必然需要执行N次内存重分配     最多需要执行N

只能保存文本数据                                                     可以保存文本或者二进制数据

可以使用所有<string.h>库函数                                  可以使用部分<string.h>库函数


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值