缓存使用场景的理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Stubborn_Cow/article/details/53841252

      我们先来看一个互联网的应用场景,一个电子商务网站里面有N多的商品,而商品是不会频繁更改而读取频率又是很高的数据,如果按普通的业务架构的话,就是程序直连DB,但是DB的QPS和TPS因为ACID的限制,在虚拟容器下(例vmware,kvm)的吞吐量基本就是5000左右,在硬件环境下,根根据配置的高低,基本就是1W左右,而在一个每天有亿次pv的网站,切不说在限时促销、折扣的高并发场景下,就是普通时间段,热销的产品的访问量也是极高的,这不仅是对DB持续的压力(因为DB还要接受其他的请求),而且还是数据的重复访问效率极低。所以,对于这种场景下的数据读取,现在流行的做法就是将这些数据(商品的信息)存放在缓存里。在这里,我们遇到一个问题,缓存怎么用?


       我们先解释下缓存, 顾名思义,就是数据暂存的地方,你可以理解为从磁盘里取出来数据,暂时存放在内存,以待后面处理来读取。而能存放在缓存的数据,通常是频繁访问的,不会经常修改的数据。知道了什么是缓存,什么数据可以放缓存,就可以寻找合适的缓存(这里说的缓存,就是对象或者容器了)。


       目前,缓存的操作主要是两种方式,一种是使用程序自带的
map对象(像jdk的hashmap),一种是缓存软件,第一种不细说,大家可以看看hashmap的实现和应用,这里主要说缓存软件。现在流行的缓存软件是memcached、redis(如果有不了解的,google),有的博客还说到mongodb。个人认为,因为要兼顾DB的某些特性,所以做不到其他两个缓存的为了实现极高的吞吐量而采用的epoll 或 libevent事件驱动的方案,所以这里排除。下面所说的缓存,就指的是第二种。


       下面我们来看看怎么用缓存,缓存通常是单独一个服务器上的一个实例、一个虚拟机上的实例、或者多个实例,当然,你也可以在多台服务器上部署1个或者多个缓存,这就得看你的缓存的访问量了。最常见的缓存架构如下图

           服务器端写数据时,同时更新redis和mysql,读的话,如果缓存有数据,就从缓存里取,如果没有,就从mysql里取。

        还在上班,之后继续补充。。

没有更多推荐了,返回首页