杀了那个不用Redis的程序员

从2010年开始国内刮起各种『破四旧』的风,具体是哪四旧呢?一是关系型数据库慢,二是微信微博不长久,三是Java将被替代,四是百度将死。

这几年关于NoSQL非关系型数据库的信息非常多,项目里不用Redis不用MongoDB都不好意思说自己做过项目。2015年年初的时候我做了件很傻很搞笑的事情,还记得当时帮一个公司开发微信公众号,需要临时存储5分钟的Token,我想当然的就去装了Redis,然后存这个5分钟的Token,当时内心的想法是项目里一定要有缓存,用Redis最合适了。当然我之前是看过Redis和MemCache的对比文章的,当时那篇文章写的是Redis比MemCache多好多好,用MemCache的都是傻瓜,我这种年轻人最爱看这种文章了。但Redis隔山差五出问题,后来我不得不写个计划任务每天重启,再到最后重启都解决不了,就将数据迁移到了MySQL,到现在都非常稳定。之后的2年项目生涯种遇到了很多好玩的事情,最后一段将详细写,血泪史。

第二是微信微博不长久,当时寝室的小伙伴都是不屑于玩微信微博的,正直的我们怎么会去用那种约炮的软件呢?同样还有陌陌也是受鄙视的,后来直接被打脸,错过了微信公众号的最佳推广时期,最后只能留着口水看别人卖面膜。微信和微博的发展正是移动端发展最迅猛的时期,半年之间突然开发PC应用的人越来越少,好多做Delphi和C#开发的朋友要么转行了要么都跑去开发iOS和Android。去年还在唱衰微博,今年微博就凭着网红,直播发展更迅猛,成为国内用户量仅次于QQ和微信的社交类应用。

第三是Java将被替代,Golang出现时数不清的人都在说新时代的到来,当时有好多大V发文说Golang将解放程序员,将是未来,Java这种老旧的语言将被取代。可能是因为太年轻,这种文章让我奋劲十足。6年过去了,Java不但没被替代,反而发展的越来越好,在大数据、云计算、人工智能、机器学习领域占绝对的优势。反而Golang,我个人不是很看好,生态不行语言特性再好也白搭啊。就像PHP很多人厌恶,但是生态圈好,再多人讨厌也发展的起来。

第四是百度将死,可能百度确实不争气,6年前就被大家鄙视今天反而更糟糕。6年前我还买过李彦宏的自传,现在对整个百度都厌恶。这是四旧里唯一没被打脸的事;

最后说说为什么要『杀死那个不用Redis的程序员』

其实做任何事情我们都存在先入为主的思想,比如:

  1. 我们都知道Redis快,直接跑在内存里肯定比MySQL快。
  2. 开发程序速度优化是很重要的一条,所以我们要尽量让它快。
  3. Redis的特性简直就是为缓存和Session量身定做的;

但是实际情况是怎样的呢?

  1. Redis的速度并不会比MySQL快多少,在生产环境通过PHP获取数据,MySQL单表数据量1千万以下的查询速度基本保持在40ms,Redis获取一条数据基本25ms,15ms对用户来说是无感知的,一个http接口的请求速度保证在100ms就非常优秀了。所以MySQL并不慢,15ms带来的好处和带来的坏处需要取舍,当然你也可以说你把IO速度优化了40%,KPI就是这么来的,但这种有欺骗性质的事情我真的做不到。
  2. 假如你将MySQL的数据放到了Redis中,将IO速度优化了40%,确实请求速度提升了15ms。但是一大波问题来了……Redis如何备份,灾难如何恢复,降级策略。Redis的稳定性和MySQL肯定不能比,随便装的MySQL在线上跑个3年都不会有任何问题,稳定性没的说。相关的备份恢复几句脚本写完就不用管了,非常易于维护。至于Redis,每年都会重启那么几次。所以我们需要做降级策略,常用的办法是三写单读。每次写数据到两台Redis和一台MySQL,读的时候只读一台Redis,故障的话再读第二台,还故障的话就读MySQL,所以上Redis的成本非常高。半夜起来重启Redis的同学不值得同情。

说了这么多,其实我就是那个要被杀死的不用Redis的程序员。最后总结,当MySQL能搞定的时候尽量用MySQL,能减少依赖就减少依赖。很多新的技术和工具能帮助我们提升性能和体验,但是稳定性和可用性是第一位,别留单点故障。