对话《Redis入门指南》作者李子骅

李子骅

李子骅(Luin),北京航空航天大学软件学院2009级本科生,石墨研发工程师。先后工作于街旁网、楽ニュー株式会社和阿里巴巴。乐于将自己对技术的感悟与他人分享。GitHub主页https://github.com/luin,博客http://zihua.li

对话《Redis入门指南》作者李子骅

小编:您在写书的时候,还在上学,是什么样的环境下促成了《Redis入门指南》?

李子骅:2013年6月,我刚刚领到大学的毕业证书。我清清楚楚地记得,正是在那个时候,我写的第一本书《Redis入门指南》出版了。那时的我根本想不到两年后《Redis入门指南》第二版得以付印。

回想起来,真正着手写这本书是在大三的时候。当时自己还在和其他三个同样妄想着凭借技术改变世界的同学“纠集”在一起搞着创业。对于人还没凑齐就拿到天使投资的我们来说,创业的时光恐怕是整个大学四年中最悠闲的一段回忆了。我们四个人在学校不远的地方租了一个相较于没有空调和书桌的宿舍体面得多的写字楼,天天聚在一起一门心思研究怎样能够继续优化产品的技术架构——回想起来我大一时绞尽脑汁想出来的择业理想就是找一份能让自己静下心来沉淀技术的工作,短短两年不到的时间,理想就实现了,想来并不是一件值得开心的事情。

小编:为什么要写《Redis入门指南》?

我写书的契机,也是产生在这前面所讲到的背景下。当时我们在项目中虽然非常依赖Redis,但更多地还是把它当成Memcached的替代品来使用。那时的Redis在我的眼里不过是一颗钉子一样:哪里需要就钉进去,之后就再也想不起来他的好处了。直到后来我们的App加入了图片处理功能,要将用户上传的图片进行缩放、滤镜处理。图片处理这种CPU密集型操作对于我们后台使用的Node.js而言无疑是短綆汲深,线上运行了几天后发现效果差强人意,为此我转而使用C语言重写了整个图像处理逻辑。既然引入了多语言的异构,我们也自然而然就需要寻找一个合适的任务队列服务来调谐。我调研了不少任务队列服务,但最终吸引我的还是Redis。Redis 2.0引入的BLPOP和BRPOP两个阻塞命令使得利用Redis实现任务队列成为了可能,同时架构层面的降熵对于一个人手紧缺的团队也是求之不得。

然而Redis相较于其他成熟的任务队列服务有一个明显的劣势:缺少文档。Redis官网也只是寥寥数笔简单说明了两个命令的用法,但是真正想将其用到生产环境中去,不了解其性能以及内部的工作原理对于那时的我而言是说不过去的。为此我转而在空间时间开始阅读Redis的源代码。因为Redis问世并不久,加上Salvatore Sanfilippo自持的编码哲学也是简洁和去依赖,所以源代码的阅读并不是一件非常困难的事情。在阅读过程中,我总结了很多只通过阅读官方文档了解不到的信息,正是这些信息加上我们之前对Redis的使用经验,构成了这本《Redis入门指南》。

小编:第2版较第1版有什么不同?

我从日本回国加入了阿里巴巴,负责的工作也和Redis密切相关。这段时间Redis发展迅猛,Partial Sync, Sentinel和Cluster等功能的加入使得《Redis入门指南》第1版在内容上显得有些欠缺,恰好海玲老师问到我有没有出第2版的计划,于是几个月前我开始了第2版的更新计划。

第1版相比于第2版,除了对之前的错误进行了改正之外,还对几个示例做了修改,使之更符合目前大多数公司对Redis的使用场景。当然恰逢Redis 3.0的推出,《Redis入门指南》第2版重点加入了对新出的Cluster的介绍,随着Redis的用途越来越广泛,单机的瓶颈也越来越明显,相信读过第2版中的相关介绍,读者一定能对Redis集群的使用有一个全面的了解。

小编:你的求职经历是怎样的?要不要和我们读者一起分享一下?

李子骅:我在大一的时候有幸进入了学长杨远骋创建的街旁网实习,在那里实习的经历直接影响到了我之后的求职道路。我加入的时候街旁网还是创业初期,研发组一共只有几个人,相较而言要做的事情太多,所以即使是实习生,我依然有机会参与到很多核心的工作中。那时带着我的刘丹、其帅给了我很大的自主权,让我能够选择自己喜欢的事情来做。自主权大到什么地步呢?我印象最深的是我加入街旁的第二天,发现街旁网首页新鲜事的用户回复都没有头像,觉得很不好看,就自己加上并在当天上线了。

我在高中的时候一直在做桌面软件的设计和开发,也取得了些不错的成绩。可以说街旁的经历把我从桌面软件开发的方向拽向了Web开发,我之后的求职道路也都是街旁网的延续。包括毕业后去了一家日本的创业公司做全栈开发,然后回国加入了淘宝网继续做网站,一直到现在的公司。

小编:对学习Redis的程序员有怎样的建议?

李子骅:当然是读我写的《Redis入门指南》啦(笑)!Redis官方网站(http://redis.io/) 是一个很好的参考资源,任何Redis的新功能的介绍都会第一时间放在上面。初学者可能会比较担心100多个命令难以记忆,实际上学习的时候只需要通读一遍,大致了解都有哪些命令,以后需要用到再查即可。Redis是一个实践性非常强的技术,学习的时候要注意多进行实践练习。

小编:对于现在超负荷加班加点的程序员你有什么建议吗?

李子骅我自己是一个不喜欢加班的人,超负荷的加班虽然适应了现在互联网行业的发展节奏,但也损害了每个从业者的健康、侵染了每个从业者的生活。当然现实中也偶尔会遇到工作做不完或者项目有bug需要加班处理的时候,这样的非常态的加班对于这个行业来说是一个很难避免也很正常的现象。然而我所看到的大部分程序员的加班都不是因为这样的原因,大多数人是以加班作为工作态度的外在表现,老板不走,自己也不走。软件开发本质上是一个需要创意和灵感的工作,简单的人天堆积并不能够加快产品开发的进度。如何通过工作时间内提高工作效率来减少无谓的加班,是每个管理者和程序员本身都要考虑的问题。

小编:您为何从阿里离开选择了创业公司呢?

李子骅:阿里是一家运作非常成熟的公司,每个人的分工明确。相较而言我更喜欢参与到一个产品的方方面面中去,这和我之前的创业经历有关。我既喜欢编码,又对产品的设计充满兴趣。平时我也会做一些产品和设计相关的工作,这使得我更加适合在小型的团队工作。我相信每个人都会基于自身的条件与兴趣对理想的公司做出选择,我也非常推荐愿意到大公司接受锻炼的朋友加入阿里。最后为我现在所在的创业公司石墨打个广告,欢迎对Node.js和Redis感兴趣的朋友加入我们:

https://cnodejs.org/topic/559e927f3d79442724b9f1e2

李子骅作品:《Redis入门指南(第2版)》


《Redis入门指南(第2版)》是一本Redis的入门指导书籍,以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的方式介绍了PHP、Ruby、Python和Node.js这4种语言的Redis客户端库的使用方法。