经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Redis » 查看文章
Redis-第九章节-动态字符串 - Mr-Tsing
来源:cnblogs  作者:Mr-Tsing  时间:2021/2/22 8:59:42  对本文有异议

目录

  • 概述
  • 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、空间预分配

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

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

4、二进制安全

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

-END-

您好,我是一个Java小白,希望和大家一起在技术的道路上一快快乐的学习。希望与您在网络的世界上会面。

原文链接:http://www.cnblogs.com/ld320321/p/14422430.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号