分布式系统中的缓存

109 阅读3分钟

1. 什么是缓存

缓存就是数据交换的缓冲区。例如对于电脑来说,CPU中的Cache就是缓存,内存也是一种缓存。缓存是一种用空间换时间的设计,目的是能够更快的处理数据。缓存分为硬件和软件部分组成:

  • 硬件:如CPU的一级缓存、二级缓存、三级缓存,以及电脑的内存条
  • 软件:比如Redis、Java 的内存Map等等

对于缓存有个重要指标就是命中率:缓存命中率 = 缓存中读取次数 / 总读取次数 * 100,例如读100次,99次都是从缓存中获取,那么命中率就是99%。

2.缓存能带来什么

缓存的目标就是能尽快的处理数据,所以缓存能加快系统对数据处理数据,带来的好处:

  • 提高系统的响应速度
  • 提供系统的承载能力
  • 降低机器的成本

上面说的都是说的带来的好处,同样引入缓存也会带来一下不好:

  • 如果缓存和系统或者硬件进行强依赖,增加了故障点。一旦缓存发生问题就影响整个系统或者硬件的运行
  • 增加了系统和硬件的复杂度

所有系统是否需要引入缓存需要综合考虑。不能因为缓存好久一味的引入,同时也需要考虑缓存引入带来的问题。在好处和问题之间做一个权衡。

3.缓存的分类

在现在微服务大行其道的今天,从是否支持分布式来看缓存可分为:

  • 分布式缓存
  • 本地缓存

缓存知识体系 (1).png

有的缓存既可以作为分布式又可以作为本地缓存如Ehcahe,但是分布式性能可能远不及Redis,所以基本上只是用来作为本地缓存。

4.项目中缓存如何选型

开发中引入缓存,首先你要了解你需要解决的问题,缓存的引入是否可以解决你的问题。选型可以参照以下几个原则(仅供参考):

  • 是否需要支持分布式

    如果不需要支持分布式,那么就没必要选择分布式的缓存。

  • 缓存数据是否需要持久化

    数据是否需要持久化这个依赖于业务的需要。从而选择缓存

  • 尽量选择社区活跃的缓存

    为什么需要社区活跃呢,因为一旦有问题那么能够在社区找到解决方法。笔者在刚开始工作的时候用过Taobao的Tair缓存(好多人可能听都没听过)。有问题只能发邮件给开发者。有时候还得不到解决。

  • 缓存的稳定性和使用的广泛性

    是否在生产中广泛应用,广泛应用的缓存在稳定性和支持方面都有保障

5. 总结

缓存引入是为了解决系统的问题,但是在引入的时候需要考虑引入后对系统的影响。如果在不引入缓存和引入缓存都能解决,这个时候就需要评估两者间的利弊。例如引入缓存能够降低100毫秒的响应时间。但是整个接口的降幅才3%。那么这个降幅和引入缓存可能导致的故障和维护以及系统复杂度来说到底哪个比较重要。就需要具体分析。所有缓存是为了给系统一个更优解,并不是必须的。很多时候单纯为了使用缓存而引入这个是没有必要的。

我是蚂蚁背大象,文章对你有帮助点赞关注我,文章有不正确的地方请您斧正留言评论~谢谢!