Redis

Redis 说的 binary safe 是什么意思

Redis 把值当成一串带长度的原始字节,不解释内容,也不认 \0 结尾。

C 语言的字符串遇到 \0 就截断。Redis 自己的字符串结构(SDS)带着长度字段,通信协议也是先发长度再发内容,所以图片、protobuf、任意编码的文本都能原样存取。

shell
printf 'a\0b' | redis-cli -x SET bin
STRLEN bin       # 3

printf '你好' | redis-cli -x SET cn
STRLEN cn        # 6,按 UTF-8 字节数,不是字符数

代价是它不懂字符集:STRLEN 数的是字节,比较也按字节。类比 MySQL,更像 VARBINARY,而不是带排序规则的 VARCHAR。

esc