欢迎来到天天文库
浏览记录
ID:21683624
大小:2.48 MB
页数:37页
时间:2018-10-23
《redis设计与实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数据库技术丛书Redis设计与实现黄健宏 著图书在版编目(CIP)数据Redis设计与实现/黄健宏著.—北京:机械工业出版社,2014.4(数据库技术丛书)ISBN978-7-111-46474-7I.R…II.黄…III.数据库-基本知识IV.TP311.13中国版本图书馆CIP数据核字(2014)第079820号本书全面而完整地讲解了Redis的内部机制与实现方式,对Redis的大多数单机功能以及所有多机功能的实现原理进行了介绍,展示了这些功能的核心数据结构以及关键的算法思想,图示丰富,描述清晰,并给出大量参考信息。通过阅读本书,读者可以快速、有效地了解Redis的内部构造以及
2、运作机制,更好、更高效地使用Redis。本书主要分为四大部分。第一部分“数据结构与对象”介绍了Redis中的各种对象及其数据结构,并说明这些数据结构如何影响对象的功能和性能。第二部分“单机数据库的实现”对Redis实现单机数据库的方法进行了介绍,包括数据库、RDB持久化、AOF持久化、事件等。第三部分“多机数据库的实现”对Redis的Sentinel、复制、集群三个多机功能进行了介绍。第四部分“独立功能的实现”对Redis中各个相对独立的功能模块进行了介绍,涉及发布与订阅、事务、Lua脚本、排序、二进制位数组、慢查询日志、监视器等。本书作者专门维护了www.redisbook.co
3、m网站,提供带有详细注释的Redis源代码,以及本书相关的更新内容。Redis设计与实现黄健宏著出版发行:机械工业出版社(北京市西城区百万庄大街22号邮政编码:100037)责任编辑:吴怡责任校对:殷虹印刷:版次:2014年6月第1版第1次印刷开本:186mm×240mm1/16印张:25.25书号:ISBN978-7-111-46474-7定价:79.00元凡购本书,如有缺页、倒页、脱页,由本社发行部调换客服热线:(010)8837899188361066投稿热线:(010)88379604购书热线:(010)683262948837964968995259读者信箱:hzjsj@
4、hzbook.com版权所有·侵权必究封底无防伪标均为盗版本书法律顾问:北京大成律师事务所韩光/邹晓东前 言时间回到2011年4月,当时我正在编写一个用户关系模块,这个模块需要实现一个“共同关注”功能,用于计算出两个用户关注了哪些相同的用户。举个例子,假设huangz关注了peter、tom、jack三个用户,而john关注了peter、tom、bob、david四个用户,那么当huangz访问john的页面时,共同关注功能就会计算并打印出类似“你跟john都关注了peter和tom”这样的信息。从集合计算的角度来看,共同关注功能本质上就是计算两个用户关注集合的交集,因为交集这个
5、概念是如此的常见,所以我很自然地认为共同关注这个功能可以很容易地实现,但现实却给了我当头一棒:我所使用的关系数据库并不直接支持交集计算操作,要计算两个集合的交集,除了需要对两个数据表执行合并(join)操作之外,还需要对合并的结果执行去重复(distinct)操作,最终导致交集操作的实现变得异常复杂。是否存在直接支持集合操作的数据库呢?带着这个疑问,我在搜索引擎上面进行查找,并最终发现了Redis。在我看来,Redis正是我想要找的那种数据库——它内置了集合数据类型,并支持对集合执行交集、并集、差集等集合计算操作,其中的交集计算操作可以直接用于实现我想要的共同关注功能。得益于Red
6、is本身的简单性,以及Redis手册的详尽和完善,我很快学会了怎样使用Redis的集合数据类型,并用它重新实现了整个用户关系模块:重写之后的关系模块不仅代码量更少,速度更快,更重要的是,之前需要使用一段甚至一大段SQL查询才能实现的功能,现在只需要调用一两个Redis命令就能够实现了,整个模块的可读性得到了极大的提高。自此之后,我开始在越来越多的项目里面使用Redis,与此同时,我对Redis的内部实现也越来越感兴趣,一些问题开始频繁地出现在我的脑海中,比如: Redis的五种数据类型分别是由什么数据结构实现的? Redis的字符串数据类型既可以存储字符串(比如"hellowo
7、rld"),又可以存储整数和浮点数(比如10086和3.14),甚至是二进制位(使用SETBIT等命令),Redis在内部是怎样存储这些值的? Redis的一部分命令只能对特定数据类型执行(比如APPEND只能对字符串执行,HSETIV只能对哈希表执行),而另一部分命令却可以对所有数据类型执行(比如DEL、TYPE和EXPIRE),不同的命令在执行时是如何进行类型检查的?Redis在内部是否实现了一个类型系统? Redis的数据库是怎样存储各种不同数据类型的键值对
此文档下载收益归作者所有