redis学习-sds数据类型
2014-10-27 21:09
239 查看
今天开始了redis的学习,本来想直接从源码看起的,不过看到有篇对redis介绍的基础教程 《Redis 设计与实现(第一版)》于是决定从这个开始入门。1.数据类型定义
typedef char *sds; struct sdshdr { // buf 已占用长度 int len; // buf 剩余可用长度 int free; // 实际保存字符串数据的地方 char buf[]; }; 2.重新计算新的长度
newlen = sdshdr.len + required_len
if newlen < SDS_MAX_PREALLOC: newlen *= 2 else: newlen += SDS_MAX_PREALLOC 3. 关于这种分配策略会浪费内存吗?
执行 APPEND 命令的字符串键数量通常并不多, 占用内存的体积通常也不大, 所以这一般并不算什么问题 如果执行 APPEND 操作的键很多, 而字符串的体积又很大的话, 那可能就需要修改 Redis 服务器, 让它定时释放一些字符串键的预分配空间, 从而更有效地使用内存。
小结
Redis 的字符串表示为 sds ,而不是 C 字符串(以 \0 结尾的 char*)。对比 C 字符串, sds 有以下特性:可以高效地执行长度计算(strlen);可以高效地执行追加操作(append);二进制安全;sds 会为追加操作进行优化:加快追加操作的速度,并降低内存分配的次数,代价是多占用了一些内存,而且这些内存不会被主动释放。相关文章推荐
- Redis学习手册(List数据类型)
- Redis学习手册(Sorted-Sets数据类型)
- Redis学习手册(List数据类型)
- redis学习笔记二之数据类型
- Redis学习手册(Set数据类型)
- Redis学习手册(Hashes数据类型)
- Redis学习手册(Set和Zset数据类型)
- Redis学习手册(Set数据类型)
- Redis学习笔记-List数据类型
- redis学习笔记二之数据类型
- 二 redis学习笔记之数据类型
- Redis学习手册(Sorted-Sets数据类型)
- Redis学习手册(List数据类型)
- Redis学习手册(Set数据类型)
- Redis学习手册(Set数据类型)
- Redis学习手册(String数据类型)
- Redis学习手册(Set数据类型)
- Redis学习手册(Hashes数据类型)
- Redis学习手册(Hashes数据类型)
- Redis学习手册(List数据类型)