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

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

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

[[313440]]

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

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

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

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

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

 

责任编辑:华轩 来源: 今日头条
相关推荐

2011-05-30 14:50:56

程序员

2018-04-02 11:19:20

MacAppleScript代码

2015-10-12 09:03:53

程序员法则

2021-03-22 22:38:04

程序员工具编码

2022-07-20 07:45:15

多线程程序性能

2014-11-25 10:14:04

程序员

2014-11-26 09:21:30

程序员

2018-08-24 09:02:26

2014-07-14 11:28:41

2019-11-27 10:08:36

程序员技能开发者

2019-01-21 14:13:51

程序员技能开发者

2013-01-17 10:10:44

程序员

2019-03-04 15:09:49

程序员互联网思维模式

2014-12-05 09:59:17

程序员

2014-03-28 10:30:20

程序员码农

2013-05-30 13:30:00

代码效率程序员

2015-04-27 14:22:39

程序员提升自己价值

2019-05-16 08:36:53

Eureka缓存网关

2022-12-29 15:20:34

开发工具
点赞
收藏

51CTO技术栈公众号