一个程序员的快速成长
蒋德钧,中国科学院大学博导,在分布式存储领域有很深造诣。
我在百度时,公司组织技术论坛,有幸与蒋老师见过两次。第一次见面,蒋老师还是中科院计算所的研究员,作为特邀嘉宾,他在台上讲,我在台下听。第二次见面,我在工作中已取得了一点成绩,有幸与蒋老师同台交流,而且他与久哥是校友,很早就认识,当天晚上还一起吃了饭。随着交流的深入,对他的技术也愈加佩服。
第一次交流,蒋老师分享的是Redis实战,就是这次分享,彻底改变了我对技术的认知。通过他的分享,我开始注重数据结构与算法。通过他的分享,我开始意识到只有弄懂底层原理,才是真正掌握一门技能。那时我常常自诩精通MySQL+Redis,听了蒋老师的分享,脸被打的啪啪响。
String类型,作为Redis中唯一的“键-单值”类型,操作简单,易于理解,常常被当作Redis中的万金油。但是它有一个明显的短板,就是它保存数据时所消耗的内存空间最多。对于不了解Redis底层原理的人,很容易误以为最简单的类型,理应消耗最少的资源。但实际情况不是这样的。我们当时就面临Redis扩容问题,随着业务发展,单实例Redis内存消耗已到70%。根据业务特点,虽然已经预测数据量不会再有明显增长,但70%毕竟离警戒线太近,不得不考虑分布式方案。众所周知,再简单的分布式系统相比单实例来说,运维复杂度都是指数级增长。如果能从资源消耗角度解决问题,没人会考虑分布式方案。
蒋老师就是在这个时候,不早不晚,刚刚好出现。虽然他讲的很多原理性的东西,我当时并没听懂,但是这些都不重要,有那句“String存数据时所消耗的内存空间最多”就够了。晚上回去,我立刻做了实测,数据长度10位,共500w条数据,使用String占用400Mb,使用Hash ZipList仅仅占用70M,效果超级明显。第二天就在公司做了优化方案评审。因为这个骚操作,让我着实在部门火了一把。
这次再次想起蒋老师,完全是个巧合。就是过年拜年,遇到我媳妇儿的一个表表弟(媳妇儿老姨的孙子),聊起工作,发现我俩是同行。他在一个叫慧博的外包公司做外包,工作不是很如意,再加上我丈母和媳妇儿吃饭时跟人吹牛了,说我家苦李在XX国企混得不赖,于是人家求上门了,问能不能给安排个工作。这可把我难住了。他的学历达不到要求,虽然我也是二本,但他毕竟不如我硬核,几乎没有特招的可能。我如实告知后,他妈又说,能不能帮帮俺小儿(儿子的意思),起码找个不是外包的吧,当姐夫的,帮忙指点指点。我看那孩子还算实诚,于是加了微信。
看他简历以后,就一个感觉,要是我,我也不要。简历写得项目很多,但感觉每个项目都是重复。所有项目都是堆砌业务逻辑,完全看不到难度递进。我把知乎那篇文章推给他,就是讲“用5年时间专研一个领域,一定可以成为该领域专家”的那篇。他看完之后,我问,“有没有感觉?”。
他说,“有”。
我说,“那你想学什么?”
他说,“不知道”。
我仔细研究了一下他的简历,感觉用Redis能包装其中两个项目,就跟他说,你学Redis吧,学完后我给你改下简历。他同意。
在帮他找教程的时候,恰好搜到蒋老师的《Redis核心技术与实战》,于是推给了他,让他一课一课照着学。蒋老师的课我听过,有一种特殊情怀,再加上他讲课风格我很喜欢,所以压根没考虑其他的。好在这个小表弟还算争气,学的不错,笔记做的很认真,并且按我的要求,课程只是大纲,学的过程中遇到知识点,要通过其他渠道补充学习,例如,Redis里提到的所有数据结构,要通过其他教程或书本,把每个点都要学透。他一一照做。以目前来看,学的还行,起码能找个像样的工作了。
因为要写这篇文章,出于礼貌,我应该在微信上给蒋老师打个招呼。几年前加过好友,一次都没聊过,这次冷不丁打扰人家,心里还有点小紧张。好在蒋老师人比较随和,还给我开玩笑说,这是免费帮他做了广告。不管从哪个方面说,有需要学习Redis的人都可以看看,教程有讲解,有文章,确实不赖。课程二维码:
苦李
祝好。
李苦李公众号