redis源码阅读补充说明以及SDS的一点补充

栏目: 数据库 · 发布时间: 6年前

内容简介:自己撸了好久的源码,发现越到上层,越需要一些指导性的思想来让自己将之前看过的东西串联起来,这就迫切需要大神或者经典书籍来帮自己一把了。大神呢,由于自己比较宅,圈子也比较小,也就放弃了,还是选择了交智商税的方式,选择了黄健宏大神的《Redis设计与实践》来看。在攻读redis后半部分源码期间,我的博客会在中间穿插着一些关于这本书的读书笔记,主要是对于写过博客的补充和对即将讲解源码部分的说明,还请大家提前知晓~比如,刚看了前言的我,就知道了redis当中的事件分为两种:文件事件和时间事件。

自己撸了好久的源码,发现越到上层,越需要一些指导性的思想来让自己将之前看过的东西串联起来,这就迫切需要大神或者经典书籍来帮自己一把了。大神呢,由于自己比较宅,圈子也比较小,也就放弃了,还是选择了交智商税的方式,选择了黄健宏大神的《Redis设计与实践》来看。

在攻读 redis 后半部分源码期间,我的博客会在中间穿插着一些关于这本书的读书笔记,主要是对于写过博客的补充和对即将讲解源码部分的说明,还请大家提前知晓~

比如,刚看了前言的我,就知道了redis当中的事件分为两种:文件事件和时间事件。

文件事件:主要用于应答客户端的连接请求,接收客户端发来的命令以及向客户端返回命令回复

时间事件:主要用于执行常规的维护和管理操作来保持redis服务器的正常运作,一些重要的定时操作是由这类事件管理的~

下面来补充下之前说的SDS对象:

1. redis当中sds字符串除了用来保存数据库中的字符串值之外,还会被用作缓冲区:AOF以及客户端 状态中的输入缓冲区都是由SDS来实现的。

2. SDS与C字符串的区别

  • 尝试事件复杂度读取字符串的长度,len属性
  • 杜绝缓冲区溢出,len+free属性
  • 减少修改字符串时带来的内存重分配次数,空间预分配和惰性空间释放
  • 二进制安全,所有SDS API都会以处理二进制的方式来处理SDS存放在buf数组里的数据,程序不会对其中的数据做任何限制、过滤、或者假设,它会使用len属性来判断字符串是否结束
  • 兼容部分C字符串函数

下表列出了SDS当中主要操作的API

函数 作用
sdsnew 创建一个包含给定C字符串的SDS
sdsempty 创建一个不包含任何内容的空SDS
sdsfree 释放给定的SDS
sdslen 返回SDS的已使用空间字节数
sdsavail 返回SDS的未使用空间字节数
sdsdup 创建一个给定SDS的副本
sdsclear 清空SDS保存的字符串内容
sdscat 将给定C字符创拼接到SDS字符串的结尾
sdscatsds 将给定SDS字符串拼接到另一个SDS字符串的末尾
sdscpy 将给定的C字符串复制到SDS里面,覆盖SDS原有的字符串
sdsgrowzero 用空字符将SDS扩展至给定长度
sdsrange 保留SDS给定区间的数据,不再区间内的数据会被覆盖或清除
sdstrim 接受一个SDS和一个C字符串作为参数,从SDS左右两端分别移除所有在C字符串中出现过的字符
sdscmp 对比两个SDS字符串是否相同

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

大思维:集体智慧如何改变我们的世界

大思维:集体智慧如何改变我们的世界

杰夫·摩根 / 郭莉玲、尹玮琦、徐强 / 中信出版集团股份有限公司 / 2018-8-1 / CNY 65.00

智能时代,我们如何与机器互联,利用技术来让我们变得更聪明?为什么智能技术不会自动导致智能结果呢?线上线下群体如何协作?社会、政府或管理系统如何解决复杂的问题?本书从哲学、计算机科学和生物学等领域收集见解,揭示了如何引导组织和社会充分利用人脑和数字技术进行大规模思考,从而提高整个集体的智力水平,以解决我们时代的巨大挑战。是英国社会创新之父的洞见之作,解析企业、群体、社会如何明智决策、协作进化。一起来看看 《大思维:集体智慧如何改变我们的世界》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具