![](https://img.haomeiwen.com/i8229358/04d361bcd6dbb2a6.jpg)
Redis没有直接使用C语言的传统字符串表示(以空字符结尾的字符数组)
当Redis需要的的不仅仅是一个字符串的面量,当修改字符串的值的时候。Redis通过SDS来表示字符串的值,(底层都是使用SDS实现的)
举个例子:
redis>set msg "hello world"
ok
redis>get msg
"hello world"
多个数据
redis>rpush msg "hello" "world"
(integer) 2
redis>LRANGE msg 0 -1
''hello"
"world"
redis将保存字符串msg的SDS。键值对的键 msg 值 为"hello"和"world"。
SDS的定义
每个sds.h/sdshdr结构表示一个sds值:
C语言和SDS之间的区别
- c字符串: 获取字符串长度复杂度O(N)
- SDS : 获取字符串长度复杂度O(1)
- c字符串:API是不安全的,可能造成缓冲区溢出
- SDS:API安全的,不会造成缓冲区溢出
- c字符串:只能保存文本数据
- SDS:可以保存文本或者二进制数据
- c字符串: 可以使用所有的<string.h>
- SDS:可以使用一部分<string.h>
网友评论