关于redis:Redis第九章节动态字符串

37次阅读

共计 794 个字符,预计需要花费 2 分钟才能阅读完成。

目录

  • 概述
  • SDS(动静字符串)
  • SDS(动静字符串)与 c 语言字符串的区别

1、概述

String 类型底层实现的简略动静字符串 sds,是能够批改的字符串。它采纳预调配冗余空间的形式来缩小内存的频繁调配。

2、SDS 动静字符串

动静字符串 是以 \0 为分隔符。最大容量 是 redis 被动调配的一块内存空间,理论存储内容 是具体的存的数据。

3、SDS(动静字符串)与 c 语言字符串的区别

1、获取存储长度不同

c 语言: c 语言不记录长度信息,如果要获取字符串的长度,须要遍历所有的字符串,能力获取字符串的长度。获取长度的复杂度为 O(n)
sds(动静字符串):sds 存储了字符串的长度,获取长度的复杂度为 O(1)

2、缓存溢出

c 语言: c 语言不记录长度,在执行 strcat 函数时,假如调配了内存,存储的内容比曾经调配的内存多时,这个时候就会呈现缓冲区溢出景象。
sds(动静字符串):sds 存储内容时,先查看内容的存储是否可能存储下理论的值,如果不能存储理论的值,就先扩大缓存区域,再将值存储到缓冲区域中。

3、内存的开拓和开释

c 语言:须要本人被动开释或者扩大内存,如果不可能被动开释或者扩大内存,就会呈现缓冲溢出或者泄露。
sds(动静字符串):sds 采取上面的形式

1、空间预调配

  // 先进行内存区域进行扩大, 而后在执行上面的代码
  public void  test(){if(len < 1M){// 程序调配和 len 属性一样的大小未应用的空间。}else if(len > 1M){// 程序调配 1M 未应用的空间。}
 }

2、惰性空间开释
在批改字符串时,如果理论的内容要比老的数据小,先不将缓冲区的闲暇内存开释掉,等下次存储内容时再进行空间的开释或者扩大。

4、二进制平安

c 语言: C 语言必须存储指定的格局数据。
sds(动静字符串):SDS 不会对数据限度。


您好,我是一个 Java 小白,心愿和大家一起在技术的路线上一快高兴的学习。心愿与您在网络的世界上会面。

正文完
 0