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

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

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

缓存的使用,没有定论,没有所谓“一定,必须等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


















本文转自yanyangtian51CTO博客,原文链接:http://blog.51cto.com/yanyangtian/867512  ,如需转载请自行联系原作者



相关文章
|
2月前
|
缓存 JavaScript 前端开发
vue2基础组件通信案例练习:把案例Todo-list改写成本地缓存
vue2基础组件通信案例练习:把案例Todo-list改写成本地缓存
50 5
|
2月前
|
缓存 JavaScript 前端开发
vue2基础组件通信案例练习:把案例Todo-list改写成本地缓存
vue2基础组件通信案例练习:把案例Todo-list改写成本地缓存
19 1
|
2月前
|
缓存 Java 数据库连接
使用MyBatis缓存的简单案例
MyBatis 是一种流行的持久层框架,支持自定义 SQL 执行、映射及复杂查询。本文介绍了如何在 Spring Boot 项目中集成 MyBatis 并实现一级和二级缓存,以提高查询性能,减少数据库访问。通过具体的电商系统案例,详细讲解了项目搭建、缓存配置、实体类创建、Mapper 编写、Service 层实现及缓存测试等步骤。
|
6月前
|
缓存 NoSQL Java
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
124 5
|
7月前
|
缓存 NoSQL 前端开发
【Redis技术专区】「实战案例」谈谈使用Redis缓存时高效的批量删除的几种方案
【Redis技术专区】「实战案例」谈谈使用Redis缓存时高效的批量删除的几种方案
152 0
|
7月前
|
存储 缓存 PHP
|
存储 缓存 NoSQL
【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )
【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )
|
存储 缓存 NoSQL
Python 数据库开发实战 - Python与Redis交互篇- 综合案例 - 新闻管理系统 - 缓存新闻数据至redis
Python 数据库开发实战 - Python与Redis交互篇- 综合案例 - 新闻管理系统 - 缓存新闻数据至redis
|
SQL 缓存 Java
mybatis二级缓存案例
mybatis二级缓存案例
|
缓存 Java 数据库
一级缓存案例
一级缓存案例