【案例讨论】从案例引发的对缓存设计的思考,干货讨论,绝对不玩虚的

主题:从案例引发的对缓存设计的思考

背景: 谈到性能优化,势必要谈到缓存架构的设计与使用。几乎是所有人都知道缓存的威力,但是知道终归只是知道,如何真正合理的在自己的项目中进行使用,又是另外一回事了。我们团队为不少的公司的项目进行了性能与架构的优化,遇到了不少由于误用,滥用缓存带来的问题,这些项目的缓存不仅没有使得性能进行提示,反而成为了性能瓶颈。

缓存的使用,没有定论,没有所谓“一定,必须等XXX这样”,没有这样的金科玉律,一切都是“根据项目的实际情况而定”,但是,我们看到的情况并不是这样的,我们也问过很多的人,回答让我们吃惊“上网大家都这样的用的啊,XXX就应该是这样的啊”。机械式的照搬,不带头脑的瞎用,结果可想而知。我们本次的讨论,是实实在在的干货的讨论,会给出一些常用的策略和场景,大家可以根据情况使用,希望是“授之以渔”,而不是生搬硬套。

 讨论大纲:
        不同项目中,你认为在哪里可以使用缓存(例如。以Web项目为例子)
        缓存的策略是什么
        如何设计比较智能的缓存
        缓存中数据以及不同数据带来的性能问题
        常见的缓存误区

 

 

这样吧,我先开个头,大家可以一起参与!
我首先说说在项目中可以使用缓存的地方。

我这里用一个图可能表述的更加清楚!
如图:
20120517095429.png

 

 

 

 

 

既然我们谈缓存这个话题,那么我们就把这个话题谈细致一点,因为很多时候:谈大帽子的话很多人都会滔滔不绝,但是一到真实的细节与落实的地方,很多人就偃旗息鼓了,呵呵 有点”吹起来,天下无敌;做起来,一无是处“的感觉。

我们首先就来看看浏览器的缓存。
这个好搞啊,做过网站的朋友都知道,这个设置主要就是通过设置:Cache-Control 这个响应头来实现的,如下:
20120517100234.png

 



不同的技术平台,实现的方式不一样,大家也不要纠结这些平台的差异,只要最后结果是一样的就OK了,要怀着包容心去看每一种技术,如果连技术的差异性都无法容忍,未必也太小家子气了,呵呵呵。

例如,在微软技术的ASP.NET中,可以通过几种方式来实现:
1.页面中设置,如下:
20120517100540.png



2.代码中设置,如下:
20120517100619.png



3.IIS中设置,如下:
20120517100705.png

 

 

浏览器缓存可以缓存图片,js,css,当然,还可以把一些数据,通过js对象的形式保存在浏览器中。

浏览器缓存的问题主要在于图片,js,css的更新上面。

例如如果我们设置了缓存的时间为1一个月,那么这些资源很有可能就在一个月还没有到就因为我们发布新的版本而更新了。这个时候,浏览器不会知道的,还是会使用老的版本。
这不是我们希望看到的,解决的办法也是很简单,如果大家留心点,就会发现很多的站点的js,css是这样命名的:XXX-1.2.js

这就是通过版本控制来来使得浏览器重新下载新的资源。

 

 

 

内容太多,更多请参看:http://www.agilesharp.com/Forum.aspx/t-17

http://bbs.chinaunix.net/thread-3744450-1-1.html

 

posted @ 2012-05-18 14:27  小洋(燕洋天)  阅读(3399)  评论(11编辑  收藏  举报