返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期
缓存
为什么要用缓存
为什么要用缓存呢,说缓存之前先说使用缓存的优点。
- 减少寄宿服务器的往返调用(round-trips)。
- 如果缓存在客户端或是代理,将减少对服务器的请求,减少带宽。
- 减少对数据库服务器的往返调用(round-trips)。
- 当内容缓存在web服务器,能够减轻对数据库的请求。
- 减少网络带宽。
- 避免了重新生成可重用内容的时耗。
- 提高性能
- 因为缓存减少了round-trips, network traffic(网络带宽),并避免- 了生成可重用内容的时耗,所以对性能有巨大的提高。
传统的缓存方式
传统的缓存方式如下面这张图
之前我们处理方式处理起来也很简单
1. 页面输出缓存,直接在 ASP.NET中页面缓存的使用OutputCache 在aspx页的顶部加这样一句即可:
<%@ OutputCache Duration="60" VaryByParam="none" %>
Duration 表示缓存的时间秒,必选,否则报错。
2. 第二种方式
if (this.Cache["Keys"] == null)
{
this.Cache.Insert("Keys", List, null, DateTime.Now.AddHours(2), TimeSpan.Zero);
}
这里是检查缓存中Keys是否存在,如果不存在,则写入一个新的值List.还有其他的一些使用方法。
上面两种方式显然不在现在使用范畴,也不在我想说的范畴之内。,年代貌似有点久远,不用webform基本用不到。现在我们更多是的使用MVC。
我们想说的是MVC输出缓存。
MVC缓存
输出缓存:Outputcache
,分为Action输出缓存和Controller输出缓存。使用的场景包括某个页面的数据更新不是很频繁,不需要每次都从数据库区查询。缓存起来从内存中读取。
数据缓存:是相对于全局的。任何地方需要调用的时候都可以去调用。使用的场景包括权限管理这种模块的。每个角色对于菜单的访问都是固定的,所以有必要将角色,权限,菜单这种数据做一个全局的数据缓存。修改时再做缓存的更新。
输出缓存和数据缓存区别:打个比方输出缓存就像是“局部变量”,数据缓存就像是全局变量(只是个比喻)。
Controller输出缓存和 Action缓存使用方式是一样的,就是Controller 或Action上打[OutPutCache]特性标签。但是他们之间又是有区别的。
一、控制器缓存
Control缓存的作用域是整个控制器,所以在这个控制器下的所有Action都会被缓存起来。Control缓存的粒度比较粗,应用也比较少些。
[OutputCache(Duration = 10)]
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.CurrentTime = DateTime.Now;
return View();
}
}
二、Action缓存
将[OutPutCache]特性标签打在Action上,这样,只有加缓存的Action才会有缓存,其他的Action是没有的。
Outputcache特性常用的属性参数
名称 | 描述 |
---|---|
AllowMultiple | 获取或设置一个值,该值指示是否可指定筛选器特性的多个实例。 |
CacheProfile | 获取或设置缓存配置文件名称。 |
ChildActionCache | 获取或设置子操作缓存。 |
Duration | 获取或设置缓存持续时间(以秒为单位)。 |
Location | 获取或设置位置。 |
NoStore | 获取或设置一个值,该值指示是否存储缓存。 |
Order | 获取或者设置执行 |