【Redis】字符串原理--简单动态字符串SDS

一.SDS定义

【Redis】字符串原理--简单动态字符串SDS_第1张图片

  1. free 属性值为0,标识SDS没有分配任何未使用空间。
  2. len  属性值为5,标识SDS保存了一个5字节长度的字符串。
  3. buf  属性是一个char类型数组,数组的前5个字节保存了,'R' 'e' 'd' 'i' 's' 五个字符,最后一个保存空字符串  '\0'。

【Redis】字符串原理--简单动态字符串SDS_第2张图片

这个示例是 SDS为buf数组分配了五字节未使用空间,所以它的未使用空间值为5

二.SDS与C字符串的区别

序号 C字符串 SDS
1 获取字符串长度的复杂度为 O(N) 获取字符串长度的复杂度为 O(1)
2 API是不安全的,可能会造成缓冲区溢出 API是安全的,不会造成缓冲区溢出
3 修改字符串长度N次必然需要执行N次的内存重分配

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

  1.空间预分配

  2.惰性空间释放

4 只能保存文本数据 可以保存文本或者二进制数据(二进制安全)
5 可以使用所有 库中的函数 可以使用一部分库中的函数

你可能感兴趣的:(REDIS,redis,数据库,缓存)