缓存听起来不错,但这些情况下千万别使用缓存

缓存对我们而言并不是一个陌生的词汇,使用缓存就是为了加快计算机读取数据的速度减小数据库的压力。但是,使用缓存也会牺牲一些其他方面的优势,比如牺牲了数据的强一致性。只要数据产生了副本,就一定会出现副本数据与原数据之间的差异,这就是一致性。因此,我们在使用缓存的时候就一定会失去一定的一致性,这是无法避免的。某些场景对数据的一致性要求并不是非常高,所以我们才使用缓存来换取更高的效率。

因此在评估一个系统技术解决方案是否需要使用缓存时,除了要评估使用缓存能否提高性能、能提升多少性能以外,还要看为了提高性能而牺牲的数据一致性能否让用户接受。举个例子:公司的财务系统要求实时查看各类财务信息,财务信息作为一个非常重要的数据来说,任何牺牲一致性的缓存都不应该存在。如果某位同事的工资已经发了,但是系统上面还现实未发,这将多么尴尬。使用缓存的终极目的是为了提高性能,但不能盲目。

适合使用缓存的场景有很多,在下面这些情况中使用缓存是非常明智的:

读密集型的应用;

存在热数据的应用;

对响应失效要求较高的应用;

对一致性要求不严格;

需要实现分布式锁的时候。

一个常见的例子:网站的首页需要查询到的数据通常都会使用缓存。一个原因是因为首页通常都需要非常快的响应速度,一旦响应速度慢了,用户流失将非常严重;另一个原因就是首页需要展示的数据一致性要求通常不高。基于这两点原因,我们完全可以使用缓存来达到我们的目的。

虽然使用缓存听起来很不错,甚至非常有逼格、有技术范了。但是,下面这些情况下千万不要使用缓存:

更新频繁,对于更新频率过高的数据,频繁同步缓存中的数据所花费的代价可能相当于从缓存中查询带来的好处。简而言之就是功过相抵,甚至还有更糟糕的情况,那就是功不抵过;

对一致性要求严格,比如上面举的例子,财务系统的财务数据,这就是个一致性要求严格的情况;

读少,对于读取非常少的系统而言,使用缓存就完全没有意义了,毕竟使用缓存的目的是为了读取数据更高效;

数据量很小的情况下,当然也没必要使用缓存了,因为数据库本身完全可以支持。

所以,在考虑采用某种技术解决方案的时候,不光要考虑它所带来的高性能,还要综合考虑其他的因素。比如成本,比如信息安全,比如用户可接受度等。

#### 欢迎关注我的公众号“java工会”,一起交流技术

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,048评论 2 89
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,705评论 25 709
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,998评论 2 59
  • 前言 再次使用Github做任务,hiahiahia~嗨森耶,不仅可以在用中学,还可以当做刻意训练,不荒废已经学过...
    许小小丽阅读 2,972评论 9 20
  • 一、兴趣培养为孩子选择兴趣课,有什么参照标准吗? 晓:首先,对比我们小时候的条件,现在孩子有很多学习兴趣爱好的机会...
    晓言晓语阅读 392评论 0 0