使用缓存前必须先明白一件事:缓存的设计是一门较为复杂的学问,主要考虑的问题包括:要不要缓存?要缓存哪些数据?要缓存多少数据?要缓存多久?如何更新缓存(手动还是自 动)?将缓存放在哪里?
缓存是一个中大型系统所必须考虑的问题。为了避免每次请求都去访问后台的资源(例如数据库),我们一般会考虑将一些更新不是很 频繁的,可以重用的数据,通过一定的方式临时地保存起来,后续的请求根据情况可以直接访问这些保存起来的数据。这种机制就是所谓的缓存机制。
根据缓存的位置,我们可以吧缓存分为:
1、客户端缓存(缓存在用户客户端,例如:浏览器)
2、服务器缓存(缓存在服务器中,可以缓存在内存中,也可以缓存在文件里,并且还可以进一步地区分为本地缓存和fe分布式缓存两种))
MVC3中的缓存功能
ASP.NET MVC3 继承了ASP.NET的优良传统,内置提供了缓存功能支持。主要表现为如下几个方面:
①可以直接在Controller,Action或者ChildAction上面定义输出缓存(这个做法相当于原先的页面缓存和控件缓存功能)
②支持通过CacheProfile的方式,灵活定义缓存的设置(新功能)
③支持缓存依赖,以便当外部资源发生变化时得到通知,并且更新缓存
④支持使用缓存API,还支持一些第三方的缓存方案(例如分布式缓存)
那么,下面我们就逐一来了解一下
一、范例准备
我准备了一个空白的MVC 3项目,里面创建好了一个Model类型:Employee
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- namespace MvcApplicationCacheSample.Models
- { public class Employee
- {
- public int ID { get; set; }
- public string Name { get; set; }
- public string Gender { get; set; }
- }
- }
然后,我还准备了一个HomeController
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using MvcApplicationCacheSample.Models;
- namespace MvcApplicationCacheSample.Controllers
- { public class HomeController : Controller
- {
- //
- // GET: /Home/
- public ActionResult Index()
- {
- //这里目前作为演示,是直接硬编码,实际上可能是读取数据库的数据
- var employees = new[]{
- new Employee(){ID=1,Name="ares",Gender="Male"}
- };
- return View(employees);
- }
- }
- }
- 同时,为这个Action生成了一个View
- @model IEnumerable<MvcApplicationCacheSample.Models.Employee>
- @{
- ViewBag.Title = "Index";
- }
- <h2>Index</h2>
- <p>
- @Html.ActionLink("Create New", "Create")
- </p>
- <table>
- <tr><th>Name</th>
- <th>Gender</th>
- <th></th>
- </tr>
- @foreach (var item in Model) {
- <tr>
- <td>@Html.DisplayFor(modelItem => item.Name)</td>
- <td>@Html.DisplayFor(modelItem => item.Gender)</td>
- <td>
- @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
- @Html.ActionLink("Details", "Details", new { id=item.ID }) |
- @Html.ActionLink("Delete", "Delet