码迷,mamicode.com
首页 > 其他好文 > 详细

redis学习-sds数据类型

时间:2014-10-27 22:55:17      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:style   http   ar   使用   sp   数据   on   问题   html   

今天开始了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学习-sds数据类型

标签:style   http   ar   使用   sp   数据   on   问题   html   

原文地址:http://www.cnblogs.com/hanframe/p/4055139.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!