网站名百度搜不到,西安印象网站建设,WordPress搭建在线电影,网页游戏开服表弹窗最近面试的时候被问到Redis 的二进制安全相关八股文面试题。Redis二进制安全内容比较多#xff0c;以下是简单的总结大致的过程#xff0c;需要深入学习的建议跳过 Redis是基于C语言进行开发的#xff0c;而C语言中的字符串是二进制不安全的#xff0c;所以Redis就没有直接… 最近面试的时候被问到Redis 的二进制安全相关八股文面试题。Redis二进制安全内容比较多以下是简单的总结大致的过程需要深入学习的建议跳过 Redis是基于C语言进行开发的而C语言中的字符串是二进制不安全的所以Redis就没有直接使用C语言的字符串而是自己编写了一个新的数据结构来表示字符串这种数据结构称之为简单动态字符串Simple dynamic string简称sds。 在C语言中字符串采用的是一个char数组柔性数组来存储字符串而且字符串必须要以一个空字符串\0来结尾。字符串并不记录长度所以如果想要获取一个字符串的长度就必须遍历整个字符串直到遇到第一个\0为止\0不会计入字符串长度故而获取字符串长度的时间复杂度为O(n)。 正因为C语言中是以遇到的第一个空字符\0来识别是否到了字符串末尾因此其只能保存文本数据不能保存图片、音频、视频和压缩文件等二进制数据否则可能出现字符串不完整的问题所以其是二进制不安全的。 Redis中为了实现二进制安全的字符串对原有C语言中的字符串实现做了改进。如下所示就是一个旧版本的sds字符串的结构定义 struct sdshdr{int len;//记录buf数组已使用的长度即SDS的长度(不包含末尾的\0)int free;//记录buf数组中未使用的长度char buf[];//字节数组用来保存字符串
} 经过改进之后如果想要获取sds的长度不用去遍历buf数组了直接读取len属性就可以得到长度时间复杂度一下就变成了O(1)而且因为判断字符串长度不再依赖空字符\0所以其能存储图片、音频、视频和压缩文件等二进制数据不用担心读取到的字符串不完整。 以上是基于个人总结如果发现有误请指出我立即更正。