Redis5 设计与源码分析 阅读笔记 01

2 篇文章 1 订阅

从github上下载redis的源代码,地址为 https://github.com/antirez/redis.git

mac 事先安装了CLion,导入redis源码工程如下,然后切换到redis 6.0 

第2章 简单动态字符串

实现类为sds.h 和 sds.c 

  struct sds {

        int len; // buf中已占用字节数

        int free;// buf中剩余字节数

        char buf[] ;//  数据空间

   }

 

   

redis 字符串设计优点

1.有单独的统计变量len和free,可以很方便得到字符串长度

2.内容存放在柔性数组buf中

3.有长度统计len存在,读写字符串不用依赖"\0"终止符,保证了二进制安全

len和free各自占用4个字节,总共8个字节

由于有free变量,所以使用字符串时,可以直接判断出是否需要申请空间

字符串扩容 :

  1. 若sds 中剩余空闲长度avail 大于新增内容长度addLen,直接在柔性数组buf末尾追加即可,无需扩容

  2.若sds 剩余空闲长度avail 小于等于新增长度addLen

      len+addLen < 1MB, 则按照新长度2倍扩容

      len + addLen > 1MB,  按照新长度+1MB 扩容

第3章 跳跃表  t_zset.c文件

   

   每一层都是一个有序链表,查找时,优先从最高层向后查找;到达某节点时,如果next节点大于要查找的值或者next指针

指向NULL,从当前节点下一层继续寻找

  主要用于有序集合ZSet的实现

  查询 ,插入 ,删除平均复杂度都为O(logN)

  1.zset-max-ziplist-entries 128 : zset采用压缩列表时,元素个数最大值,默认值为128

  2.zset-max-ziplist-value  64  : zset采用压缩列表时,每个元素字符串长度最大值,默认值为64

超过以上2个阈值,就把ziplist转化成跳跃表skiplist

zset转化为跳跃表skiplist后,即使元素被逐渐删除,也不会重新转为压缩列表

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值