news 2026/4/27 17:39:57

怎么理解Redis的String的二进制安全??不再以\0作为判断标准

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
怎么理解Redis的String的二进制安全??不再以\0作为判断标准

文章目录

      • 1. C 语言字符串的“致命弱点”:`\0`
      • 2. Redis 的解决方案:SDS (Simple Dynamic String)
      • 3. 为什么这被称为“二进制安全”?
      • 4. 深度对比
      • 总结

要理解 Redis 的“二进制安全(Binary Safety)”,最直接的方法就是对比它与C 语言传统字符串处理方式的区别。

简单来说,二进制安全意味着:Redis 不会对你存入的二进制数据进行任何解释、限制或过滤。你存进去是什么,取出来就是什么。


1. C 语言字符串的“致命弱点”:\0

在 C 语言中,字符串是以\0(ASCII 码为 0 的空字符)作为结束标志的。

  • 执行逻辑:当程序读取字符串时,它会从头开始扫,一旦遇到\0,就认为这个字符串结束了。
  • 后果:如果你想在字符串中间存入一张图片或一个压缩包的二进制数据,而这些数据中恰好包含\0,C 语言函数就会“自作聪明”地提前截断,导致数据丢失。

2. Redis 的解决方案:SDS (Simple Dynamic String)

Redis 并没有直接使用 C 语言的字符串表示,而是自己封装了一个结构叫做SDS。它的核心改进在于:显式保存字符串的长度。

structsdshdr{intlen;// 已使用的字节长度intfree;// 未使用的字节长度charbuf[];// 实际保存数据的字节数组};
  • 不再数\0:当 Redis 需要读取数据时,它不会去扫描\0,而是直接查看len属性。
  • 长度决定一切:哪怕你的数据里有 100 个\0,Redis 也会根据len的指示,老老实实地把这 100 个字节全部读出来。

3. 为什么这被称为“二进制安全”?

“安全”在这里的意思是:数据的原始二进制位(Bit)是受保护的。

因为 Redis 不依赖特殊的转义字符或结束符来处理数据,所以它可以存储任何形式的二进制数据,包括:

  • 图片/视频/音频的字节流。
  • Protobuf/JSON序列化后的对象。
  • 加密后的密文(密文往往包含大量不可见字符和\0)。

4. 深度对比

特性C 语言原生字符串Redis SDS (String)
结束判断扫描到\0停止根据len长度直接读取
内容限制不能包含\0,否则被截断无限制,二进制安全
获取长度需要遍历整个字符串O ( n ) O(n)O(n)直接读取len变量O ( 1 ) O(1)O(1)
缓冲区溢出容易发生(如果不检查长度)自动扩容,非常安全

总结

Redis 依然会在buf数组的末尾补一个\0,这仅仅是为了兼容某些 C 语言标准的库函数(比如打印日志)。但在处理你的业务数据时,它完全不以\0为准。

这种设计让 Redis 的 String 类型成为了一块**“万能内存胶布”**,可以贴任何类型的数据。

既然你提到了二进制安全,你是在研究 Redis 如何缓存复杂的 Java 对象序列化结果吗?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 17:39:56

EPANET 水分配系统分析:面向工程师的完整水力水质模拟终极指南

EPANET 水分配系统分析:面向工程师的完整水力水质模拟终极指南 【免费下载链接】EPANET The Water Distribution System Hydraulic and Water Quality Analysis Toolkit 项目地址: https://gitcode.com/gh_mirrors/ep/EPANET 想要精准分析城市供水系统的水力…

作者头像 李华
网站建设 2026/4/27 17:32:31

SubFinder:智能多源字幕自动匹配引擎

SubFinder:智能多源字幕自动匹配引擎 【免费下载链接】subfinder 字幕查找器 项目地址: https://gitcode.com/gh_mirrors/subfi/subfinder 在全球化影视消费时代,精准匹配字幕已成为提升观影体验的关键环节。SubFinder作为一款开源字幕查找工具&a…

作者头像 李华
网站建设 2026/4/27 17:30:13

EdgeRemover:Windows系统Edge浏览器自动化管理终极方案

EdgeRemover:Windows系统Edge浏览器自动化管理终极方案 【免费下载链接】EdgeRemover A PowerShell script that correctly uninstalls or reinstalls Microsoft Edge on Windows 10 & 11. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRemover Edg…

作者头像 李华
网站建设 2026/4/27 17:30:08

【GraphWorX32】【IDRA】项目迁移其他电脑后运行项目闪退

GraphWorX32画面项目更换电脑后运行项目闪退如何解决 GraphWorX32软件 打开GenTray自动运行软件 修改项目VB代码 修改VB程序 启动软件测试 相关资料下载地址 📢 操作有风险,动手需谨慎!注意修改前提前备份项目!以防文件修改失败导致丢失! GraphWorX32软件 在二次开发或者修…

作者头像 李华