Redis设计与实现(2)SDS API


SDS的主要操作API:

函数作用时间复杂度
sdsnew创建一个包含给定C字符串的SDS时间复杂度为O(N),N为给定C字符的长度
sdsempty创建一个不包含任何内容的空SDSO(1)
sdsfree释放给定的SDSO(N)N为被释放SDS的长度
sdslen返回SDS的已使用空间字节数这个值可以通过读取SDS的len属性来直接获得,复杂度为O(1)
sdsavail返回SDS的未使用空间字节数这个值可以通过读取SDS的free属性来直接获得,复杂度为O(1)
sdsdup创建一个给定SDS的副本(copy)O(N),N为给定SDS的长度
sdsclear清空SDS保存的字符串内容因为惰性空间释放策略,复杂度为O(1)
sdscat将给定C字符拼接到SDS字符串的末尾O(N),N为被拼接C字符串的长度
sdscatsds将给定SDS字符串拼接到另一个SDS字符串的末尾O(N),N为被拼接SDS字符串的长度
sdscpy将给定的C字符串复制到 SDS里面,覆盖SDS原有的字符串O(N),N为被复制C字符串的长度
sdsgrowzero用空字符将SDS扩展值给定长度O(N),N为被复制C字符串的长度
sdsrange保留SDS给定 区间内的数据,不在区间内的数据会被覆盖或清除O(N),N为保留数据的字节数
sdsstrim接受一个SDS和一个C字符串作为参数,从SDS中移除所有在C字符中出现过的字符O(n~2),N为给定C字符串的长度
sdscmp对比两个sds字符串是否相同O(N),N为两个SDS中较短的那个SDS的长度

重点回顾

Redis只会使用C字符串作为字面量,在大多数情况下,Redis使用SDS(Simple Dynamic String,简单动态字符串)作为字符串表示。
比起C字符串,SDS具有以下优点:
1.常数复杂度获取字符串长度
2.杜绝缓冲区溢出
3.减少修改字符串长度时所需的内存重分配次数
4.二进制安全
5.兼容部分C字符串函数

本文链接:

https://heyzen.club/index.php/Coder/68.html
1 + 4 =
2 评论
    cheap cialis onlineLinux
    3月24日 回复

    You really make it seem so easy with your presentation but I find this topic to be actually something that I think
    I would never understand. It seems too complicated and very broad for

    1. I am looking forward for your next post, I'll try to get the hang of it!
    MatCocaChrome 67Windows 8.1
    3月10日 回复

    Elimite Cream At Cvs Cialis Achat Cialis Tadalafil 20mg Price cialis 5mg Healthy Male Viagra Reviews Propecia Y Culturismo