redis 简单动态字符串

Sds (Simple Dynamic String,简单动态字符串)是Redis 底层所使用的字符串表示.


sds 的用途

Sds 在Redis 中的主要作用有以下两个:

1. 实现字符串对象(StringObject);
2. 在Redis 程序内部用作char* 类型的替代品;


实现字符串对象

Redis 是一个键值对数据库(key-value DB),数据库的值可以是字符串、集合、列表等多种类型的对象,而数据库的键则总是字符串对象。

对于那些包含字符串值的字符串对象来说,每个字符串对象都包含一个sds 值


以下命令创建了一个新的数据库键值对,这个键值对的键和值都是字符串对象,它
们都包含一个sds 值

redis> SET book "Mastering C++ in 21 days"
OK
redis> GET book
"Mastering C++ in 21 days"


以下命令创建了另一个键值对,它的键是字符串对象,而值则是一个集合对象:

redis> SADD nosql "Redis" "MongoDB" "Neo4j"
(integer) 3
redis> SMEMBERS nosql
1) "Neo4j"
2) "Redis"
3) "MongoDB"


将sds 代替C 默认的char* 类型

因为char* 类型的功能单一,抽象层次低,并且不能高效地支持一些Redis 常用的操作(比如追加操作和长度计算操作),所以在Redis 程序内部,绝大部分情况下都会使用sds 而不是char* 来表示字符串。
性能问题在稍后介绍sds 定义的时候就会说到,因为我们还没有了解过Redis 的其他功能模块,所以也没办法详细地举例说那里用到了sds ,不过在后面的章节中,我们会经常看到其他模块(几乎每一个)都用到了sds 类型值。
目前来说,只要记住这样一个事实即可:在Redis 中,客户端传入服务器的协议内容、aof 缓存、返回给客户端的回复,等等,这些重要的内容都是由都是由sds 类型来保的。



Redis 的字符串表示为sds ,而不是C 字符串(以\0 结尾的char*)。

对比C 字符串,sds 有以下特性:
– 可以高效地执行长度计算(strlen);
– 可以高效地执行追加操作(append);
– 二进制安全;


sds 会为追加操作进行优化:加快追加操作的速度,并降低内存分配的次数,代价是多占用了一些内存,而且这些内存不会被主动释放。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值