技术开发 频道

ASP.NET MVC 3:缓存功能的设计问题

  【IT168技术】今天这一篇文章我来谈一谈在MVC 3项目中的缓存功能,以及针对缓存的一些设计上的考量,给大家参考参考。

  为什么需要讨论缓存?缓存是一个中大型系统所必须考虑的问题。为了避免每次请求都去访问后台的资源(例如数据库),我们一般会考虑将一些更新不是很频繁的,可以重用的数据,通过一定的方式临时地保存起来,后续的请求根据情况可以直接访问这些保存起来的数据。这种机制就是所谓的缓存机制。

  根据缓存的位置不同,可以区分为:

  ①客户端缓存(缓存在用户的客户端,例如浏览器中)

  ②服务器缓存(缓存在服务器中,可以缓存在内存中,也可以缓存在文件里,并且还可以进一步地区分为本地缓存和分布式缓存两种)

  应该说,缓存的设计是一门较为复杂的学问,主要考虑的问题包括:要不要缓存?要缓存哪些数据?要缓存多少数据?要缓存多久?如何更新缓存(手动还是自动)?将缓存放在哪里?本文将以较为通俗易懂的方式,来看一看在MVC3的项目中,如何使用缓存功能。对于上述提到的一些具体业务问题,我这里不会进行太过深入地探讨。

  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", "Delete", new { id=item.ID })
        
</td>
    
</tr>
}
</table>
0
相关文章