什么是二进制安全
概念的由来
在我们初学C语言时,C语言的字符串存在一个缺陷。
如果字符串中包括空字符,那么程序在读取字符串的时候,会将空字符后面的字符给忽略掉。
这样读出来的字符串就不是原有的字符串了。
Redis如何解决
1. 在Redis中定义了一种字符串,叫做简单动态字符串(SDS)
2. SDS的API会以安全的方式读取字符串,即使这个字符串存在空字符,也会将这个字符串完整的读取出来
3. Redis之所以能读取整个字符串,是由SDS的结构决定的,SDS本身会保存字符串的长度,这样API在读取字符串的时候,就会根据这个长度去读取,从而额不会丢掉空字符串后面的字符了。
4. 如下,是SDS的结构
sdshdr{ int len; int free; char[] buf[]; }
二进制安全的答案
二进制安全指的就是数据在写入是什么样,那么读取就是什么样。