Redis字符串SDS(simple dynamic string)

Redis | 简单动态字符串(simple dynamic string)-SDS 目录 一、引言 二、SDS的定义 三、为什么SDS比C字符串更适合于Redis (1)常数复杂度获取字符串长度 (2)杜绝缓冲区溢出 (3)减少修改字符串时带来的内存重分配次数 1.空间预分配 2.惰性空间释放 (4)二进制安全 (5)兼容部分C字符串函数 四、SDS的用处 五、总结 一、引言 Reds没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串( simple dynamic string,SDS)的抽象类 阅读详情

Redis字符串SDS(simple dynamic string)

一 SDS结构定义

struct {
  int len;  //记录buf中已使用的字节数量
  int free;  //buf中未使用的字节数量
  char buf[]; //字节数组
}

二 SDS与C字符串的区别

  • C字符串获取字符串长度需要遍历字节数组,时间复杂度O(N)。SDS设置和更新长度在API执行时完成,获取长度时间复杂度O(1)
  • 由于C字符串扩容可能导致buffer overflow,缩减字符串会导致内存泄漏。SDS具有一套内存分配策略,可以杜绝这些问题

三 SDS内存分配策略

  • 对SDS修改后小于1M的情况,会计算出扩容后的len*2+1,1是为了保留空字符串。例如"hello",len=5,free=0,buf=6,拼接为"hello world"后,len=11,free=11,buf=27。这样做是为了减少分配次数以提高性能。
  • 修改后大于1M,会分配1M对free空间。例如扩容后len=2M,buf=3M+1byte。
  • 惰性空间释放,当使用SDS API进行字符串缩减,并不会立即释放free空间,避免再此扩容造成性能损耗。SDS提供了相应的API真正的释放空间
  • 兼容部分C字符串函数,<String.h>部分函数同样支持SDS字符串
  • 二进制安全,因为SDS通过len判断字符串是否结束。
26、机器学习模型的成员推断攻击与隐私保护 本文探讨了机器学习模型面临的成员推断攻击及其对隐私的潜在威胁。通过使用CIFAR-10数据集,详细介绍了如何利用影子模型和攻击模型推断特定数据点是否属于模型的训练集。实验表明,即使无法直接访问模型参数和原始数据,攻击者仍能以高于随机猜测的概率进行推断,从而构成隐私风险。此外,文章还分析了实验的关键技术点,并提出了多种隐私保护建议,包括数据脱敏、差分隐私、模型正则化等方法。 阅读详情

相关推荐

金证股份软件测试笔试题面试题

boss上这家公司的HR找到了我,我看了一下这家公司的业务,是我以前做过的基金与证券。还是很感兴趣的,决定去面试看看情况。 (因为只是想去涨面试经验,没有想拿offer,一些回答有点不太对,为后面木有offer埋下伏笔。其实有点亏,毕竟走路过去,而且还花了3个小时) 地点在金证股份科技大楼8楼。 2月25号 主要分为笔试题和面试。 1、笔试题 进来的时候直接给我一份笔试题做,做了一个半小时吧。 分为3道选择题和1道SQL查询题、1道案例设计题 选择题都是考察SQL函数,可能日常生活中没有见过

全村的希望的博客 4451

redis 数据结构之和对象---简单动态字符串SDS(simple dynamic string)

1.介绍: reids 没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组)而是构建了一种名为简单动态字符串的抽象类型,并为redis的默认字符串表示,因为C字符串不能满足redis对字符串的安全性、效率以及功能方面的需求

momon的专栏 2212

Triplet Loss调参实战:Margin选多少?距离函数用哪个?我的模型为什么训不动?

本文深入探讨了Triplet Loss调参中的关键问题,包括margin参数的选择、距离函数的比较以及模型训练不动的常见原因。通过实战案例和技术分析,提供了针对不同场景(如人脸识别、商品图像、文本匹配)的margin黄金区间,并对比了欧式距离与余弦相似度的适用场景。文章还介绍了困难样本挖掘的最新策略和模型诊断的实用清单,帮助开发者高效解决度量学习中的工程难题。

weixin_29050271的博客 411

redis 数据结构1

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34319999的博客 203

深度解析direct path write temp与ASM IO性能问题:Oracle 19.17视图查询优化指南

本文深度解析了Oracle 19.17版本中复杂视图查询出现`direct path write temp`与`ASM IO for non-blocking poll`性能瓶颈的根本原因。通过对比11.2.0.4版本的执行计划差异,文章提供了从CBO参数调整、存储层优化到SQL架构重构的完整实战调优指南,帮助DBA有效解决升级后的查询性能问题。

2y3u4i5o6p的博客 1100

可乐学习NVMe之一:为什么SSD需要NVMe

1. NVMe SSD 结构简图 整体来看,NVMe SSD可以分为三部分,host端的驱动NVMe Driver、PCIe+NVMe实现的控制器以及NAND Flash+DDR4/DDR5存储介质。 芯片回片后Host侧软件或者驱动开发主要在应用层,通过一些测试工具进行benchmark跑分测试,performance性能分析,latency分析、stress-testing等等: 那么,接下来阐述为什么SSD需要NVMe,并再后续的文章介绍NVMe协议分析,个人针对协议的理解,如果有不当之处,还请各

Lucky 3169

Redis数据结构探索之动态字符串SDS(simple dynamic string)

简单的概述一下这几天自己看SDS的一些知识以及总结。写在博客里,免得以后不记得。。一步一个脚印。 大家都知道Redis底层是用C写的,但是Redis并没有直接使用C的字符串来进行保存(以空字符结尾的字符数组),而是自己创建了一种简单的动态字符串SDS,默认为Redis的字符串表示。 本篇文章用来说明SDS和C字符串不同之处,为什么使用SDS而不是直接使用C字符串。 简单介绍一下SDS的结构 fre...

YipSouL的学习笔记 519

【解决问题】‘vue‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

【解决问题】'vue' 不是内部或外部命令,也不是可运行的程序或批处理文件。

weixin_44566194的博客 4万+

Redis 数据结构之SDS (Simple Dynamic String)简单动态字符串

SDS Redis没有直接使用C语言传统的字符串,而自己构建了一种简单动态字符串(Simple Dynamic String)的抽象类型,简称为SDS。并将SDS作为Redis的默认字符串表示。 它主要有以下两个用途: 实现字符串对象(StringObject)。 在 Redis 程序内部用作 char* 类型的替代品。 SDS的定义 struct sdshdr{ int len; ...

LU_ZHAO的博客 657

SAP 资产主数据屏幕增强:对比字段追加与子屏幕/页签 2 种方案优劣

本文深入对比了SAP资产主数据(AS01/AS03)屏幕增强的两种方案:字段追加与子屏幕/页签。从技术实现、业务适配、系统维护等维度分析各自优劣,提供方案选型决策树和混合方案实践建议,帮助企业在SAP实施中做出最优选择。

weixin_28559803的博客 285

python解析通达信dat与blk数据文件【附源码】

本文介绍了一个完整的通达信金融数据解析器项目,该项目攻克了通达信专有二进制文件格式解析的技术难题。项目采用模块化架构,从基础二进制解析到增强数据分类,最终实现智能语义化列名生成,形成完整的数据处理链路。核心技术包括自适应编码检测、智能数据类型推断和基于业务规则的语义化处理,解决了逆向工程、多编码兼容性等挑战。项目成果显著,解析成功率达100%,数据可读性大幅提升,开发效率提高50%,为量化交易、可视化分析等场景提供了可靠数据支持。该方案不仅具备技术创新性,更具有实际工程应用价值,为金融数据分析领域提供了可复

qq_36224726的博客 2689

c语言 动态字符串,Redis简单动态字符串( simple dynamic string, SDS)

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?1、简单动态字符串(SDS)Redis没有使用C语言传统的字符串表示(以空字符结尾的字符数组),而是自己构建了一种名为简单动态字符串的抽象类型,并将SDS用作Redis的默认字符串表示。在Redis里面,C字符串只会作为字符串字面量用在一些无需对字符串值进行修改的地方,比如打印日志。当Redis需要的不仅仅是一个字符串字...

weixin_31586247的博客 284

[ 虚拟专用网 ] IPsce 虚拟局域网(安全的IP协议的虚拟专用网)详解(二) --- 安全联盟SA

???? 博主介绍 ????‍???? 博主介绍:大家好,我是_PowerShell,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 ????点赞➕评论➕收藏 == 养成习惯(一键三连)???? ????欢迎关注????一起学习????一起讨论⭐️一起进步????文末有彩蛋 ????作者水平有限,欢迎各位大佬指点,相互学习进步! 目录 ???? 博主介绍 一、什么是安全联盟 二、协商参数两种方式:(手动、IKE) 1. 手动 2.

qq_51577576的博客 2802

redis的简单动态字符串(SDS, Simple Dynamic String)

scss体验AI代码助手代码解读复制代码:用于声明并初始化一个指向 SDS 头结构的指针变量shT是 SDS 类型(如 8, 16, 32, 64),s是指向字符串数据的指针,##是连接符,将sdshdr和T连接起来形成结构体名(如sdshdr8), 计算方式:用字符串指针s减去头结构的大小,得到头结构的起始地址,结果:声明了一个sh变量,指向 SDS 的头结构:与第一个类似,但不声明变量,直接返回头结构指针,同样通过字符串指针s。

2401_89221445的博客 661

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Redis数据结构-简单动态字符串(Simple Dynamic String,SDS)(待完善)

Redis关于 SDS的源文件在src/sds.c sds.h/sdshdr struct sdshdr { // buf 中已占用空间的长度 int len; // buf 中剩余可用空间的长度 int free; // 字节数组 char buf[]; }; SDS本质上就是char *,因为有了表头sdshdr结构的存在,所以SDS比传统C字符串在某些方面更加优秀,并且能够兼容传统C字符串。 sds在Redis中是实现字符串对象的工具,并且.

APuddding的博客 192

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Redis源码学习——简单动态字符串SDS(Simple Dynamic String)

前两天听了学长们的交流会,偶尔接触到了redis,考虑到redis只有2W多行代码,感觉代码量不是很大,所以决心看看他的源代码。         由于刚刚接触redis,所以就跟着大牛的文章一步一步的学下去了。         打算按照《Redis 设计与实现》http://www.redisbook.com/en/latest/#id1 这本书慢慢的学下去,希望今天是一个良好的起点。

JPing的专栏 2634

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Redis简单动态字符串(simple dynamic string,SDS)剖析!

Redis没有直接使用C语言传统的字符串表示,而是自己构建了一种名为简单动态字符串(simple dynamic string, SDS)的抽象类型,并将SDS用作Redis的默认字符串表示。 SDS的定义 每个sds.h/sdshdr结构表示一个SDS值: Struct sdshdr{//记录buf数组中已使用字节的数 //等于SDS所保存字符串的长度 int len; //记录buf数组中未使用字节的数量 int free; //...

Java圈全能架构师的博客 602

Redis数据结构-简单动态字符串SDS(simple dynamic string)

Redis系列 文章目录1. 使用场景2. 为何使用SDS代替C字符串2.1 C字符串缺点2.2 更加完善的SDS2.2.1 定义2.2.2 SDS针对C字符串的升级 1. 使用场景 如果是不需要修改的字符串常量,使用C原生字符串,如:打印日志 如果需要修改就使用SDS 2. 为何使用SDS代替C字符串 2.1 C字符串缺点 不记录自身长度,每次获取都要计算,直到遇到代表字符串结尾的空字符串为止,时间复杂度为O(n) 由于不记录自身长度,在字符串拼接时如果不提前分配内存就会造成溢出 频繁的对字符串进行

chenyl 1342

Redis学习(1)——简单动态字符串(simple dynamic string,SDS)

1,Redis简单动态字符串的简介 Redis没有直接使用C语言传统的字符串表示(Redis使用ANSIC语言语言编写),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型,并将SDS用作Redis的默认字符串表示。(C语言字符串在Redis中也有应用,不过只用在一些无须对字符串值进行修改的地方,如Redis日志的打印) 2,SDS和键值对的...

H1517043456的博客 364

Redis学习篇 (1)SDS(Simple Dynamic String 简单动态字符串)

Redis是用C写的, 鉴于C没有提供一般的字符串处理方式,导致对字符串的各种处理都很麻烦,所以 Redis 自身实现了一个SDS(简单动态字符串)对象,用于操作所有的字符串,同时为了跟 C 兼容,所以 SDS 在实现的时候保证了它能直接适用于标准库 提供的各种 strxxx 函数。 SDS在Redis中也是存在最广泛的数据结构,它也是很多其他数据结构的基础,所以先选择介绍SDS。 SDS也兼容部分C字符串API(strcmp,strlen),它如何兼容C字符串我觉得也是有个很sao的操作。在开始正式..

孙三苗的专栏 857

Redis数据结构(一)-简单动态字符串(simple dynamic string,SDS)

简单动态字符串-SDS概述SDS定义SDS与C字符串的区别常数复杂度 获取 字符串长度杜绝缓冲区溢出减少修改字符串时带来的内存重分配次数空间预分配策略惰性空间释放二进制安全兼容部分C字符串函数总结(重要!!!)SDS API 概述 Redis没有直接使用 C语言传统的字符串表示(以 空字符 结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型,并将SDS 用作 Redis的默认字符串表示 在Redis里面,C字符串 只会作为

星光之子的博客 480

【redis】(一)SDS (Simple Dynamic String 简单动态字符串)

SDS 主要 api

baoyu_G的博客 426

Redis底层String的存储结构(动态字符串,simple dynamic string,SDS)、通信协议RESP

Redis由于各种原因,并没有直接使用了C语言的字符串结构,而是对其做了一些封装,     得到了自己的简单动态字符串(simple dynamic string, SDS)的抽象类型。      Redis中,默认以SDS作为自己的字符串表示。     只有在一些字符串不可能出现变化的地方使用C字...

xingze的博客 421

Redis-简单动态字符串(simple dynamic string, SDS)

参考链接:https://www.jianshu.com/p/07ab6932ec15

zhanghaoyu_java的博客 218

redis数据结构 SDS simple dynamic string 简单动态字符串 C语言字符串缺点与比较 总结

1.概念 简单动态字符串 SDS simple dynamic string 是redis 默认字符串,在redis中C字符串只会用作静态字符串,用在一些无须对字符串进行修改的地方 2.使用例子 SET message "hello world" 那么redis会创建一个键值对,键是一个字符串对象,对象底层是保存着字符串 "message"的SDS,键值对的值也是一个字符串对象,底层实现是保存着字符串"hello world"的SDS 3.SDS C语言定义 struct sdshdr { int le

weixin_45754452的博客 369

Redis源码剖析之SDS(Simple Dynamic String)

SDS(simple dynamic string)是Redis提供的字符串的封装,在redis中也是存在最广泛的数据结构,它也是很多其他数据结构的基础,所以才选择先介绍SDS。 SDS也兼容部分C字符串API(strcmp,strlen),它如何兼容C字符串我觉得也是有个很sao的操作,等看完我这篇博客你就明白了。在开始正式内容前,我先抛几个问题(有些也是面试高频题),带着问题去学习也是一种非常好的学习方法。 C语言中也算是支持String了,为什么Redis还要自己封装一个? SDS中的D(dynam

xindoo 4188
上一篇: Java线程状态转换(最详细的状态转换流程图)
下一篇: 单例模式的Java代码实现
pianozcl
博客等级 码龄9年 29粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值