Redis-第九章节-动态字符串

目录

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

一、概述

String类型底层实现的简单动态字符串sds,是能够修改的字符串。它采用预分配冗余空间的方式来减小内存的频繁分配。java

二、SDS动态字符串

动态字符串是以 \0 为分隔符。最大容量是redis主动分配的一块内存空间,实际存储内容是具体的存的数据。redis

三、SDS(动态字符串)与c语言字符串的区别

一、获取存储长度不一样缓存

c语言:c语言不记录长度信息,若是要获取字符串的长度,须要遍历全部的字符串,才能获取字符串的长度。获取长度的复杂度为 O(n)
sds(动态字符串):sds存储了字符串的长度,获取长度的复杂度为 O(1)安全

二、缓存溢出网络

c语言:c语言不记录长度,在执行strcat函数时,假设分配了内存,存储的内容比已经分配的内存多时,这个时候就会出现缓冲区溢出现象。
sds(动态字符串):sds存储内容时,先检查内容的存储是否可以存储下实际的值,若是不能存储实际的值,就先扩展缓存区域,再将值存储到缓冲区域中。函数

三、内存的开辟和释放学习

c语言:须要本身主动释放或者扩展内存,若是不可以主动释放或者扩展内存,就会出现缓冲溢出或者泄露。
sds(动态字符串):sds采起下面的方式spa

一、空间预分配3d

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

二、惰性空间释放
在修改字符串时,若是实际的内容要比老的数据小,先不将缓冲区的空闲内存释放掉,等下次存储内容时再进行空间的释放或者扩展。code

四、二进制安全

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

-END-
您好,我是一个Java小白,但愿和你们一块儿在技术的道路上一快快乐的学习。但愿与您在网络的世界上会面。

相关文章
相关标签/搜索