- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
?
?
《Redis设计与实现》前言
?
?
前言
时间回到2011年4月,当时我正在编写一个用户关系模块,这个模块需要实现一个“共同关注”功能,用于计算出两个用户关注了哪些相同的用户。
举个例子,假设huangz关注了peter、tom、jack三个用户,而john关注了peter、tom、bob、david四个用户,那么当huangz访问john的页面时,共同关注功能就会计算并打印出类似“你跟john都关注了peter和tom”这样的信息。
从集合计算的角度来看,共同关注功能本质上就是计算两个用户关注集合的交集,因为交集这个概念是如此的常见,所以我很自然地认为共同关注这个功能可以很容易地实现,但现实却给了我当头一棒:我所使用的关系数据库并不直接支持交集计算操作,要计算两个集合的交集,除了需要对两个数据表执行合并(join)操作之外,还需要对合并的结果执行去重复(distinct)操作,最终导致交集操作的实现变得异常复杂。
是否存在直接支持集合操作的数据库呢?带着这个疑问,我在搜索引擎上面进行查找,并最终发现了Redis。在我看来,Redis正是我想要找的那种数据库——它内置了集合数据类型,并支持对集合执行交集、并集、差集等集合计算操作,其中的交集计算操作可以直接用于实现我想要的共同关注功能。
得益于Redis本身的简单性,以及Redis手册的详尽和完善,我很快学会了怎样使用Redis的集合数据类型,并用它重新实现了整个用户关系模块:重写之后的关系模块不仅代码量更少,速度更快,更重要的是,之前需要使用一段甚至一大段SQL查询才能实现的功能,现在只需要调用一两个Redis命令就能够实现了,整个模块的可读性得到了极大的提高。
自此之后,我开始在越来越多的项目里面使用Redis,与此同时,我对Redis的内部实现也越来越感兴趣,一些问题开始频繁地出现在我的脑海中,比如:
·Redis的五种数据类型分别是由什么数据结构实现的?
·Redis的字符串数据类型既可以存储字符串(比如“hello world”),又可以存储整数和浮点数(比如10086和3.14),甚至是二进制位(使用SETBIT等命令),Redis在内部是怎样存储这些值的?
·Redis的一部分命令只能对特定数据类型执行(比如APPEND只能对字符串执行,HSET只能对哈希表执行),而另一部分命令却可以对所有数据类型执行(比如DEL、TYPE和EXPIRE),不同的命令在执行时是如何进行类型检查的?Redis在内部是否实现了一个类型系统?
·Redis的数据库是怎样存储各种不同数据类型的键值对的?数据库里面的过期键又是怎样实现自动删除的?
·除了数据库之外,Redis还拥有发布与订阅、脚本、事务等特性,这些特性又是如何实现的?
·Redis使用什么模型或者模式来处理客户端的命令请求?一条命令请求从发送到返回需要经过什么步骤?
为了找到这些问题的答案,我再次在搜索引擎上面进行查找,可惜的是这次搜索并没有多少收获:Redis还是一个非常年轻的软件,对它的最好介绍就是官方网站上面的文档,但是这些文档主要关注的是怎样使用Redis,而不是介绍Redis的内部实现。另外,网上虽然有一些博客文章对Redis的内部实现进行了介绍,但这些文章要么不齐全(只介绍了Redis中的少数几个特性),要么就写得过于简单(只是一些概述性的文章),要么关注的就是旧版本(比如2.0、2.2或者2.4,而当时的最新版已经是2.6了)。
综合来看,详细而且完整地介绍Redis内部实现的资料,无论是外文还是中文都不存在。意识到这一点之后,我决定自己动手注释Redis的源代码,从中寻找问题的答案,并通过写博客的方式与其他Redis用户分享我的发现。在积累了七八篇Redis源代码注释文章之后,我想如果能将这些博文汇集成书的话,那一定会非常有趣,并且我自己也会从中学到很多知识。于是我在2012年年末开始创作《Redis设计与实现》,并最终于2013年3月8日在互联网发布了本书的第一版。
尽管《Redis设计与实现》第一版顺利发布了,但在我的心目中,这个第一版还是有很多不完善的地方:
·比如说,因为第一版是我边注释Redis源代码边写的,如果有足够时间让我先完整地注释一遍Redis的源代码,然后再进行写作的话,那么书本在内容方面应该会更为全面。
·又比如说,第一版只介绍了Redis的内部机制和单机特性,但并没有介绍Redis多机特性,而我认为只有将关于多机特性的介绍也包含进来,这本《Redis设计与实现》才算是真正的完成了。
就在我考虑应该何时编写新版来修复这些缺陷的时候,机械工业出版社的吴怡编辑来信询问我是否有兴趣正式地出版《Redis设计与实现》,能够正式地出版自己写的书一直是我梦寐以求的事情,我找不到任
您可能关注的文档
- Windows游戏设计-拼图游戏-使用Win32-SDK.docx
- Windows程序设计-文本输出.docx
- Windows程序设计-键盘.docx
- Winform同一窗体切换界面-计算机毕业设计中用HTML做窗体程序界面.docx
- Winform自动升级系统的设计与实现.docx
- Xilinx-7系列FPGA-PCB设计指导.docx
- YOLOV3算法详解-设计思想以及候选区域选择.docx
- Zemax光学设计流程及案例.docx
- [C语言学习]C语言程序设计基础-第1篇.docx
- [UWP]浅谈按钮设计.docx
- 《Redis设计与实现》第1章-引言.docx
- 《Redis设计与实现》第8章-对象.docx
- 《Redis设计与实现》第一部分.docx
- 《Redis设计与实现》第十五章总结一:新旧复制功能.docx
- 《Redis设计与实现》读书笔记-数据结构与对象.docx
- 《Redis设计与实现》阅读笔记1-数据结构与对象(字符串,链表,字典,跳跃表).docx
- 《Redis设计与实现》阅读笔记10-复制.docx
- 《Redis设计与实现》阅读笔记11-Sentinel.docx
- 《Redis设计与实现》阅读笔记12-集群.docx
- 《Redis设计与实现》阅读笔记2-数据结构与对象(整数集合,压缩列表).docx
文档评论(0)