REDIS字符串-二进制安全的含义
来源:互联网 发布:srt字幕制作软件 编辑:程序博客网 时间:2024/04/28 14:03
一、sds vs c字符串
在 C 语言中,字符串可以用一个 \0
结尾的 char
数组来表示。
比如说, hello world
在 C 语言中就可以表示为 "hello world\0"
。
这种简单的字符串表示,在大多数情况下都能满足要求,但是,它并不能高效地支持长度计算和追加(append)这两种操作:
- 每次计算字符串长度(
strlen(s)
)的复杂度为 O(N)。 - 对字符串进行 N 次追加,必定需要对字符串进行 N 次内存重分配(
realloc
)。
而redis除了要处理c语言字符串之外,还需要处理redis的服务器协议等等。所以,redis实现的sds(简单动态字符串),是二进制安全的。
数据结构的定义如下:
typedef char *sds;struct sdshdr { // buf 已占用长度 int len; // buf 剩余可用长度 int free; // 实际保存字符串数据的地方 char buf[];};
从上面的数据结构定义,可以看出,redis的sds和c语言的区别就是,sds是通过buf以及len来判断字符串内容的,而不是通过“\0”来判断
二、二进制安全
看下面代码
c语言:str = "1234\0123"strlen(str)=4redis:strlen(str)=7
所以,简单来说,二进制安全就是,字符串不是根据某种特殊的标志来解析的,无论输入是什么,总能保证输出是处理的原始输入而不是根据某种特殊格式来处理。
比如这边redis通过len来表示字符串长度,不会因为中间插入了“\0”就返回错误结果。
再举个例子:(展示非二进制安全)
main(){ char ab[] = "Hello"; char ac[] = "Hello\0Hello"; strcmp(ab, ac); /*返回0, 由于是非二进制安全,误判为相等 */ }
0 0
- REDIS字符串-二进制安全的含义
- php二进制安全的含义
- redis中string类型的二进制安全
- 分布式缓存Redis之二进制安全
- php的二进制安全
- php的二进制安全
- 什么是二进制安全的函数
- Redis的数据安全
- 二进制安全
- 二进制安全
- 二进制安全
- 二进制安全
- excel 连接字符串的含义。
- 数据库连接字符串参数的含义
- 字符串 前 L的含义
- 字符串 前 L的含义
- 字符串结尾字符的含义
- 字符串 前 L的含义
- 在Python中使用QuantLib
- 条目的全选-反选_Demo
- TTreeView、TTreeNodes和TTreeNode
- Android的线程和线程池
- ORA-00093问题
- REDIS字符串-二进制安全的含义
- extjs登陆窗口含验证码
- 一个【nodejs】结合【electron】或【nwjs】的爬虫的新思路
- Spring异常处理
- NAPI机制分析
- 在亚马逊云服务器上部署阿里数据库Otter(四)
- 前缀表达式&&中缀表达式&&互换
- PaaS是如何推动企业数字化转型的
- hive表信息查询:查看表结构、表操作等