redis是C语言实现的,但redis中的字符串并没有直接用C语言中的字符串表示,而是自己构建了一种简单的动态字符串类型(SDS)。

在redis里面,C字符串只用作字面量,用在一些不会修改的地方,eg:打日志。

SDS的结构:

struct sdshdr{
int free;
int len;
char buf[];
}

free 属性值为0 表示这个sds未分配未使用的空间。

len 属性值为5 表示sds保存一个5字节长度的字符串。

buf 是char类型数组保存字符串的每个字节,并在字符串结尾增加“\0”。

SDS与C字符串区别:

1,获取字符串长度时,C字符串需要遍历字符串直到找到‘\0’为止,它的复杂度为O(n),而SDS直接访问len属性就可以直接获取字符串的长度,复杂度为O(1)。

2,SDS的api杜绝缓存区溢出,SDS调用SdsCat时,会首先判断 sds的空间是否充足,如果不够要先扩展SDS,再进行字符串拼接。

3,为了减少内存重分配的性能影响,SDS的字符串增长会做内存预分配操作,通过预分配策略,可以有效的减少redis分配内存的次数。

4,SDS是二进制安全的,C字符串通过判断是否为‘\0’找字符串结尾,而SDS通过len属性来找字符串结尾,这样就不怕字符串中间有'\0'。

最新文章

  1. add monitor resolution
  2. IO (二)
  3. 背景图片利用backgrond-posintion属性实现不同形式的分割
  4. 对manacher的一点感性理解
  5. .net面试问答
  6. bzoj1708:[Usaco2007 Oct]Money奶牛的硬币(完全背包
  7. DIV或者DIV里面的图片水平与垂直居中的方法
  8. C#执行Sql 时,出现“算术运算导致溢出”问题,如何解决?
  9. 初学C#windows程序
  10. PHP学习笔记2
  11. SQL Server 行列相互转换命令:PIVOT和UNPIVOT使用详解
  12. LINUX漏洞-安全防护--防火墙相关
  13. ubuntu查询可用安装包
  14. MySQl资料链接
  15. webpack中,css中打包背景图,路径报错
  16. netbeans php环境搭建
  17. input file样式美化
  18. 掌握11项技能,你就是优秀的前端开发project师
  19. Nagios+InfluxDB+Grafana
  20. php+原生ajax实现图片文件上传功能实例

热门文章

  1. Chrome调试 ---- 控制台获取元素上绑定的事件信息以及监控事件
  2. linux 挂载磁盘LVM
  3. Spring Cloud微服务安全实战_3-3_API安全之流控
  4. MongoDB的安装与简单使用
  5. notapad++正则替换
  6. JAVA程序执行顺序(静态代码块》非静态代码块》静态方法》构造函数)
  7. wkhtmltopdf cpdf HTML转pdf 及pdf合并
  8. BAT脚本入门
  9. 2-1docker图形管理界面
  10. 快速搭建Linux-0.11实验环境