当前位置: 首页 > news >正文

Redis设计与实现 学习笔记 第一章 引言

本书会尽量以高层次的角度对Redis的实现原理进行描述,如果读者只是对Redis的实现原理感兴趣,但并不想研究Redis的源码,那么阅读本书就够了。

如果读者打算深入了解Redis的底层细节,本书在RedisBook.com提供了一份带有详细注释的Redis源码,读者可以先阅读本书对某一功能的介绍,然后再阅读该功能对应的实现代码。

1.1 Redis版本说明

本书是基于Redis 2.9——也就是Redis 3.0的开发版来编写的,因为Redis 3.0的更新主要与Redis的多机功能有关,而Redis 3.0的单机功能与Redis 2.6、Redis 2.8的单机功能基本相同,所以本书的内容对于使用Redis 2.6至Redis 3.0的读者来说应该都是有用的。

另外,因为Redis通常都是渐进地增加新功能,并且很少会大幅地修改已有功能,所以本书大部分内容对于Redis 3.0之后的几个版本来说,应该也是有用的。

1.2 章节编排

本书由“数据结构与对象”、“单机数据库的实现”、“多机数据库的实现”、“独立功能的实现”四个部分组成。

第一部分 “数据结构与对象”

Redis数据库里面的每个键值对(key-value pair)都是由对象(object)组成的,其中:
1.数据库键总是一个字符串对象(string object);

2.数据库键的值则可以是字符串对象、列表对象(list object)、哈希对象(hash object)、集合对象(set object)、有序集合对象(sorted set object)这五种对象中的一种。

比如说,执行以下命令将在数据库中创建一个键为字符串,值也为字符串对象的键值对:
在这里插入图片描述
而执行以下命令将在数据库中创建一个键为字符串对象,值为列表对象的键值对:
在这里插入图片描述
本书第一部分将对以上提到的五种不同类型的对象进行介绍,剖析这些对象所使用的底层数据结构,并说明这些数据结构是如何深刻地影响对象的功能和性能的。

1.3 推荐的阅读方法

因为Redis的单机功能是多机功能的子集,所以无论读者使用的是单机模式的Redis还是多机模式的Redis,都应该阅读本书的第一部分和第二部分,这两个部分包含的知识是所有Redis使用者都必然会用到的。

如果读者要使用Redis的多机功能,那么阅读完第一二部分后,应接着阅读第三部分。如果只使用单机功能,那么可以跳过第三部分,直接阅读第四部分。

本书的前三个部分都是以自底向上(bottom-up)的方式来写的,也就是说,排在后面的章节会假设读者已经读过了排在前面的章节。

本书的第四部分是完全独立的,读者可以按自己的兴趣挑选要读的章节。在本书的第四部分中,除了第20章的其中一节涉及多机功能的内容之外,其他章节都没有涉及多机功能的内容,所以第四部分的大部分章节都可以在只阅读了本书第一部分和第二部分的情况下阅读。
在这里插入图片描述
1.4 行文规则

在第一次引用Redis源代码文件file中的名字name时,本书使用file/name格式,比如redis.c/main表示redis.c文件中的main函数。

在第一次引用标准库头文件file中的名字name时,本书使用<file>/name格式,比如<unistd.h>/write表示unistd.h头文件中的write函数。

在第一次引用某个名字之后,本书就会去掉名字前缀的文件名,直接使用名字本身。

结构引用规则

本书使用struct.property格式来引用struct结构的property属性,比如redisDb.id表示redisDb结构的id属性。

算法规则

除非有额外说明,否则本书列出的算法复杂度一律为最坏情况下的算法复杂度。

代码规则

本书使用C语言和Python语言来展示代码:
1.在描述数据结构以及比较简短的代码时,本书通常会直接粘贴Redis的源代码,也即C语言代码。

2.而当需要使用代码来描述比较长或比较复杂的程序时,本书通常会使用Python语言来表示伪代码。

本书展示的Python伪代码中通常会包含server和client两个全局变量,其中server表示服务器状态(redis.h/redisServer结构的实例),而client则表示正在执行操作的客户端状态(redis.h/redisClient结构的实例)。

1.5 配套网站

本书配套网站redisbook.com记录了本书的最新消息,并且提供了附带详细注释的Redis源代码可供下载,读者也可通过这个网站查看和反馈本书的勘误,或发表与本书有关的问题、意见以及建议。

相关文章:

  • 机器学习:opencv--特征检测
  • 切换笔记本键盘的启用与禁用状态
  • Java基础(Arrays工具类)(asList()方法)(详细)
  • 鸿蒙开发(NEXT/API 12)【硬件(接入手写套件)】手写功能开发
  • 《深度学习》卷积神经网络 数据增强、保存最优模型 原理解析及实例实现
  • 【自动驾驶】对2D框的四条边同时缩进
  • 【07】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Swiper轮播组件与样式结构重用
  • Linux下C开发使用小技巧
  • TIM定时中断
  • 17 vue3之tsx手写vite tsx插件
  • 每天学习一个技术栈 ——【Django Channels】篇(1)
  • Kafka与RabbitMQ:深入理解两者之间的区别
  • MySQL基础--表的增删改查
  • 时间技能物品竞品抢拍拍卖发布h5公众号小程序开源版开发
  • 笔记整理—linux进程部分(2)使用fork创建进程
  • 2017前端实习生面试总结
  • DOM的那些事
  • Koa2 之文件上传下载
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Python中eval与exec的使用及区别
  • Redis在Web项目中的应用与实践
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 今年的LC3大会没了?
  • 实现简单的正则表达式引擎
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 再次简单明了总结flex布局,一看就懂...
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • Nginx实现动静分离
  • puppet连载22:define用法
  • python最赚钱的4个方向,你最心动的是哪个?
  • ######## golang各章节终篇索引 ########
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #100天计划# 2013年9月29日
  • #APPINVENTOR学习记录
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Java)【深基9.例1】选举学生会
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (二)c52学习之旅-简单了解单片机
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)Scala的“=”符号简介
  • ./和../以及/和~之间的区别
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .net 托管代码与非托管代码
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .net后端程序发布到nignx上,通过nginx访问
  • .NET之C#编程:懒汉模式的终结,单例模式的正确打开方式
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • @antv/g6 业务场景:流程图