注:本篇小短文,随心而发,属于笔者自己的一个技术思考吧。
请看到这句话的朋友慎重,是否真的考虑阅读下去,因为不一定能给您带来帮助。但是您不惜浪费时间读完,我希望真的能引起你一点点思考,并且给您带来一定的帮助。(要是有一点帮助,不妨给个赞,因为这种类似的思考,总不间断的出现,要可以,后续可能继续分享)
正文
相信不少同学在面试、或者是平常也会思考过这个问题:为什么Redis这么快?
这个问题,网上有不少人分享总结过了。类似八股文的形式,面试的话直接套用就好了。可以说是拼记忆力的”知识”了。
最近也断断续续看了一个月的redis代码,大大小小的思维导图,笔记流程图,模块架构图画三四十张。可越往下深入,越糊涂!
糊涂在哪?以前是对Redis了解不深,现在要用了解了,细节也了解了。可是更迷糊,为什么作者这样设计?单从代码形式上看,它的代码并不是最优雅的实现方案(网络也不少人提出更好的线程模型等),但经过多年的发展,大量生产环境的实际应用,已经论证了Redis当前的实现是极其稳定和棒棒的!(可以说是单线程模型下的变态快了!)。
但是看完代码后,相信很多人会出现:
东西是学习到了,但是却不一定能真的领悟到作者为什么这样实现?
这样设计的背后原理和动机是什么?
有没更好的方法?
而且这个所谓的更好是不是真的适合redis的?
各种发散问题,都能提出来。
正所谓:“纸上得来终觉浅”!
思前想后:对于一个普通的开发者,Redis的应用者来说,怎么才能最大限度的吸取Redis代码的养分?
今天想到一个点子:我们不妨反其道而行之~~~。
就比如:Redis为什么如此快?这个问题来说吧。
别人写的Redis快。如果让你自己实现一个很慢的Redis!,你能想出各种奇葩的方式让它慢吗?
从接受到网络请求,到协议数据解析,到数据存储落地,然后结果反馈给客户端等等步骤。所有的步骤都实现一个极其慢的方案。
按照”贪婪算法”思路,每一步最优解,最后的结果肯定是最优解;那么我们每一步都是最差解,最后的结果肯定是最差方案了吧?
说到这,读者可能会不禁疑问,你傻X啊?你是要学习Redis为什么快,干嘛想怎么慢? 呵呵。勿急嘛。
读者朋友不妨问问自己。了解一个技术方案的具体实现,是不是等于也了解到之所以如此实现动机? 这个恐怕因人而异了。
所以,如果你首先自己尝试去设计一个最糟糕的方案,然后再对比redis的优雅方案,你或许能明白,为什么如此设计,它的设计比你的设计高明在哪? 从而通过对比的方式来进行学习,做到最大限度的吸取作者提供的养分!
这是不是比你直接去背网上的八股文:为什么快?来的更深刻?
完毕!