yaochow@home:~$

【思考】缓存

缓存

相信大部分开发者都用过缓存,缓存到底是解决了什么问题呢?

最初的系统

在还没有集群、分布式概念的年代,所有的应用都是单机部署的,每一个应用只有一个实例,当然那个年代的用户量也很小。

当一个开发接到一个需求的时候首先要对需求进行分析,除了业务层面的分析以外还会考虑到系统层面的问题,比如访问量的大小、并发量的大小以及效率等问题。

当访问量很小、并发量很小时在系统设计的时候就可以简单化,比如每次访问直接到数据库中读取数据;

当有一定规模的访问量、并发量很小时依然可以直接访问数据库读取数据,对效率的影响不是很大;

当有一定规模的访问量并且并发量也提升了的情况下,这时每次访问都是直接到数据库对效率就会有一定的影响了,所以此时往往要在系统设计时增加一个缓存。比如可以加一个Map,以查询条件作为key,当数据有更改时也要及时更新,当然这样会增加了系统的复杂度。

数据库的读取操作的是硬盘,缓存的读取操作的是内存,所以理论上读取缓存要比读取数据库快很多很多。

互联网时代

互联网时代的到来改变了许多人的生活方式,整个行业也出现了许多优秀的公司。

头部公司随着业务的发展,最初的设计思想已经不太能满足最新的需求了,这时又出现了许多新的概念。集群、分布式等等。

集群

集群可以简单的理解为多实例,好处是当一个实例挂掉后其他的实例依然正常工作不会影响业务流程以及随着访问量增加可以通过增加实例来保证效率。这种多实例也会带来一些问题,比如通过Map缓存的数据在不同的实例中如何统一及时更新。

Map是属于local cache,只对当前的实例适用。

分布式

分布式解决了对于复杂系统简单化的问题,这个复杂包括业务的复杂以及技术层面的复杂。

业务层面来讲比如区分了用户系统、购物车系统、结算系统等等。

技术层面比如上面说到的缓存,可以单独做成一个缓存系统。

一个应用的所有实例对应同一个缓存系统实例,这样就解决了不同实例中缓存可能存在不一致的情况。

总结

使用缓存的目的就是提高效率,随着行业发展,系统的复杂度越来越高,缓存也一样,也在随着行业的发展不断的更新,以达到最优的效果。