|
|
51CTO旗下网站
|
|
移动端

程序员误区,缓存一定能提升程序效率么?

大家好,今天我们来简单的聊一聊缓存问题。什么是缓存呢?它在系统设计中是在一个怎么样的位置呢?

作者:沙茶敏碎碎念来源:今日头条|2020-01-20 14:27

大家好,今天我们来简单的聊一聊缓存问题。什么是缓存呢?它在系统设计中是在一个怎么样的位置呢?假设在一个计算机应用里面,我们一般会把数据存放在数据库中,一般数据库的数据也是放在硬盘当中,硬盘的读写速度毕竟有限,当存在一些数据特别热的时候,例如12306,查询北京到广州有那些车次,这个数据经常被用户访问,所以我们可以把它存放在速度更快地内存上。

缓存的本质,是为了解决不同的存储介质的速度差异问题。是一个经典的空间换时间的解决方案。也就是说,使用缓存就是为了让系统更快。不过这也是需要有前提的,如果你的业务是读多写少,例如电商系统中的商品系统,商品的描述与商品的属性,都是非常典型的多读少写的场景。

一、那么缓存就一定是好东西么?缓存会不会带来一定的副作用。答案是肯定的。首先,缓存可能并不会让你的程序变得更快,相反,可能还会变得更慢。因为访问内存虽然说非常地快,但是多少也是要开销的,特别是当你的缓存不是本机而是分布式的时候,至少需要一个网络的RT。所以,如果你的缓存的命中率非常地低,那么,缓存的效果就会大打折扣,不仅没有加快程序的访问速度,还会让程序变得更慢。

二、其次,缓存可能会让你读到错误的数据,更官方一点的回答,就是数据的一致性会下降。造成这种数据的主要原因,就是缓存的操作无法保证100%成功。比方说,我们在维护一个电商系统,原本华为Mate30Pro售价为6999元,后来你决定开展一次促销活动,将价格变更为6699元,当你设置完新的价格之后,数据库已经更新了,但是缓存可能还是旧的,更要命的,如果你使用的是本机缓存,那么可能部分机器上更新成功,部分机器更新失败,导致用户可能进入不同页面的时候,看到不同的价格,从而引发用户投诉,所以,当我们使用缓存的时候,通常会设置一个过期时间,从而减少缓存失效带来的影响。

三、最后,缓存可能会带来运维上的麻烦,如果不使用缓存,当我们在页面或者APP上面看到数据错误,那么一般都是数据库的问题,但是引进了缓存之后,我们就需要增加一个工序去排查是否是缓存的问题,如果缓存是本机的,那么可能是部分机器存在问题,部分机器是好的,这就给我们排查增加了不少的难度,如果缓存是分布式的,同样也有可能存在不一致的问题,同时缓存机器的带宽、内存等等都需要不少的运维成本。

总体来说,缓存也是一把双刃剑,需要我们对业务场景进行甄别,合理地选择合适的缓存,才能够发挥出缓存的最大作用。欢迎大家关注我,共同学习,共同进步。大家的支持是我继续唠嗑的动力。

【编辑推荐】

  1. 数据库主从复制,读写分离,分库分表,分区讲解
  2. 数据库分库分表后,带来的这个难题,如何解决?
  3. 2019年全球最受欢迎数据库新鲜出炉,你猜中了吗?
  4. 国内首份《云数据库选型及满意度调查报告》出炉!
  5. 一次线上故障:数据库连接池泄露后的思考
【责任编辑:华轩 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

Python应用场景实战手册

Python应用场景实战手册

Python应用场景实战手册
共3章 | KaliArch

22人订阅学习

一步到位玩儿透Ansible

一步到位玩儿透Ansible

Ansible
共17章 | 骏马金龙1

205人订阅学习

云架构师修炼手册

云架构师修炼手册

云架构师的必备技能
共3章 | Allen在路上

141人订阅学习

视频课程+更多

架构之路 - JAVA之设计模式精讲

架构之路 - JAVA之设计模式精讲

讲师:王军伟25711人学习过

企业级Web Dns构建实战

企业级Web Dns构建实战

讲师:王硕10027人学习过

强哥带你精通OpenStack私有云

强哥带你精通OpenStack私有云

讲师:周玉强52015人学习过

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微