关于本书

本书将对Redis的使用方法进行说明。Redis是一个内存数据库(或者说内存数据结构)服务器,最初由Salvatore Sanfilippo创建,现在是一个开源软件。本书不要求读者有任何使用Redis的经验,不过因为本书的绝大部分示例都使用了Python编程语言来与Redis进行交互,所以读者需要对Python有一定程度的认识才能更好地理解本书的内容。

如果读者不熟悉Python的话,那么可以去看看Python 2.7.x版本的Python语言教程(Python language tutorial),并在本书提到某种Python语法结构的时候,查找并阅读相应语法结构的文档。虽然本书展示的Python代码在将来可能会被翻译成Java代码、JavaScript代码或者Ruby代码,但这些翻译代码的清晰性和简洁性可能会比不上现有的Python代码,并且在读者阅读本书的时候,将Python代码翻译成其他代码的工作可能尚未完成。

如果读者没有任何使用Redis的经验,那么应该先阅读本书的第1章和第2章,然后再阅读本书的其他章节(介绍Redis安装方法和Python安装方法的附录A是一个例外,它可以在阅读第1章和第2章之前阅读)。本书的第1章和第2章介绍了Redis是什么、它能做什么,以及读者可能会想要使用它的理由。之后的第3章介绍了Redis提供的各种结构,说明了这些结构的作用和总体概念。第4章介绍了Redis的管理操作,以及实现数据持久化的方法。

如果读者已经有使用Redis的经验,那么可以考虑跳过第1章和第3章——这两章介绍的入门内容都是为那些没有使用过Redis的读者准备的。另一方面,虽然第2章也属于入门内容,但即使是有Redis使用经验的读者也不应该跳过这一章,因为它展示了本书解决问题时的风格:首先展示问题,然后解决问题,之后回顾问题并改善已有的解决方案,最后,如果读者还想继续深究下去的话,本书还会指出比已有的解决方案更好的新方案。

本书在回顾一个主题的时候,通常会说明第一次讨论这个主题的章节。并非所有主题都要求读者先阅读之前的相关章节,但如果书本确实这么要求的话,那么读者最好照书本所说的去做,因为这有助于读者更好地了解整个主题的来龙去脉。

本书很少会给出某个特定问题的最佳解法,更多的是通过展示例子来让读者思考如何去解决一类问题,并从直觉和非直觉两个方面为这些问题构建解答,所以如果读者在阅读某个主题的时候,发现了比本书列出的解法更好、更快或者更简单的解法,那将是一件非常棒的事情。

本书每一章对应的源代码都包含了一个测试运行器(test runner),测试运行器提供了那一章定义的绝大部分函数或者方法的使用示例,如果读者在理解某一章的示例时遇到了困难,或者想不明白示例是怎样运作的,那么可以去看看那一章对应的源代码。除此之外,每章对应的源代码还给出了那一章大部分练习的答案。

内容编排

本书总共分为3个部分:第1部分对Redis进行了基本介绍,并展示了一些Redis的使用示例;第2部分对Redis的多个命令进行了详细的介绍,之后还介绍了Redis的管理操作以及使用Redis构建更复杂的应用程序的方法;最后,第3部分介绍了如何通过内存优化、水平分片以及Lua脚本这三种技术来扩展Redis。

本书的第1章对Redis进行了基本介绍,列举了Redis提供的5种数据结构,对比了Redis与其他数据库之间的相同之处和不同之处,实现了一个可以对文章进行投票的简单文章聚合网站。

本书的第2章介绍了如何使用Redis来提升应用程序的性能以及如何使用Redis来实现基本的网络分析。不太了解Redis的读者应该会从第2章开始逐渐明白Redis在最近几年变得越来越流行的原因——因为它简单易用,而且性能强劲。

本书的第3章基本上是一个命令文档,它陆续介绍了Redis的常用命令、基本事务命令、排序命令和过期时间命令,并给出了这些命令的使用示例。

本书的第4章介绍了数据持久化、性能测试、故障恢复和数据丢失防护等概念。这一章前几节介绍的内容都是和Redis管理有关的,而之后的4.4节和4.5节则深入地讨论了Redis事务和流水线命令的性能。Redis新手和中级Redis用户都应该阅读4.4节和4.5节,因为本书在之后的章节里面会再次回顾这两节提到的问题。

本书的第5章介绍了将Redis用作数据库,并使用它来实现日志、计数器、IP所属地查找程序和服务配置程序的方法。

本书的第6章介绍了一些对于规模日益增长的应用程序非常有用的组件,比如自动补完、加锁、任务队列、消息传递以及文件分发。

本书的第7章深入研究了一系列与搜索有关的问题和解决方案,它们可能会改变读者对于数据查询和数据过滤的看法。

本书的第8章详细地说明了如何构建一个类似Twitter的社交网站,并给出了包括流API在内的整个网站后端实现。

本书的第9章讨论了扩展Redis时会用到的内存优化技术,其中包括结构分片方法以及短结构的使用方法。

本书的第10章介绍了对Redis进行水平分片和主从复制的方法。当一台服务器不足以满足需求的时候,这两项特性可以提供更强劲的性能以及更多的可用内存。

本书的第11章介绍了如何通过Lua脚本编程在服务器端对Redis的功能进行扩展,并在某些场景下把Lua脚本用作提升性能的方法。

本书的附录A介绍了如何在Linux、OS X和Windows这三种不同的平台上安装Redis、Python以及Python的Redis客户端。

本书的附录B是一个参考手册,它列出了各种在使用Redis时可能会有用的资源,比如本书用到的Python语法结构的文档,一些Redis使用案例,用于完成各种任务的第三方Redis库,诸如此类。

代码约定和下载

为了与一般文本区别开来,本书在代码清单和正文中使用fixed-width font like this这样的字体来显示代码。重要的代码都带有相应的注释,有些代码还会带有编号,以便在之后的内容中对被编号的代码进行说明。

本书列出的所有代码清单的源代码都可以在Manning网站下载到:www.manning.com/RedisinAction。如果读者想要查看被翻译成其他语言的源代码,或者想要在线阅览用Python语言编写的源代码,那么可以访问以下这个GitHub地址:github.com/josiahcarlson/redis-in-action

作者在线论坛

Manning出版社为本书创建了相应的专属论坛,读者可以通过这个论坛来发表关于本书的评论,询问技术问题,或者寻求作者或其他读者的帮助。www.manning.com/RedisinAction记载了访问本书专属论坛的方法,部分功能(如发贴)可能需要在注册或者登录之后才能使用。

Manning出版社承诺为本书提供论坛以供读者和作者使用,但并不对作者的参与度做任何保证:作者对该论坛的所有贡献都是自愿的,并且是无偿的,因此,读者应该尽可能地询问一些有挑战性的问题,从而尽量激发作者的积极性。

在本书正常销售期间,这个作者在线论坛会一直对外开放。

关于作者

在大学毕业之后,Josiah Carlson博士继续在加州大学欧文分校学习理论计算机科学。在学习之余,Josiah断断续续地做过一些助教工作,偶尔还会承接一些编程方面的工作。在Josiah快要研究生毕业的时候,他发现教职方面的工作机会并不多,于是他加入了Networks in Motion公司,开始了自己的职业生涯。在Networks in Motion公司任职期间,Josiah负责开发实时GPS导航软件,以及交通事故通知系统。

在离开Networks in Motion公司之后,Josiah加入了Google公司,之后他又跳槽到了Adly公司工作,开始学习和使用Redis来构建内容定向广告系统和Twitter分析平台。几个月之后,Josiah加入了Redis邮件列表,并在那里回答了数百个关于使用和配置Redis的问题。在离开Adly公司并成为ChowNow公司的首席架构师兼联合创始人之后不久,Josiah开始创作这本《Redis实战》。