缓存与ABP Redis Cache

为什么要用缓存

为什么要用缓存呢,说缓存之前先说使用缓存的优点。

减少寄宿服务器的往返调用(round-trips)。

如果缓存在客户端或是代理,将减少对服务器的请求,减少带宽。

减少对数据库服务器的往返调用(round-trips)。

当内容缓存在web服务器,能够减轻对数据库的请求。

减少网络带宽。

避免了重新生成可重用内容的时耗。

提高性能

因为缓存减少了round-trips, network traffic(网络带宽),并避免- 了生成可重用内容的时耗,所以对性能有巨大的提高。

传统的缓存方式

传统的缓存方式如下面这张图

之前我们处理方式处理起来也很简单

页面输出缓存,直接在 ASP.NET中页面缓存的使用OutputCache 在aspx页的顶部加这样一句即可:
<%@ OutputCache Duration="60" VaryByParam="none" %>
Duration 表示缓存的时间秒,必选,否则报错。

第二种方式
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   获取或者设置执行操作筛选器的顺序。  
SqlDependency   获取或设置 SQL 依赖项。  
TypeId   (从Attribute继承。)  
VaryByContentEncoding   获取或设置基于内容变化的编码。  
VaryByCustom   获取或设置基于自定义项变化的值。  
VaryByHeader   获取或设置基于标头变化的值。  
VaryByParam   获取或设置基于参数变化的值。  
输出缓存CacheProfile使用配置文件设置缓存

举例其中的CacheProfile,这种方式便于统一配置,当然也可以设置参数duration、location 、varybyparam等。我们需要在system.web 节点下加入这些

<!---CacheProfile配置文件中设置缓存--> <caching> <outputCacheSettings> <outputCacheProfiles> <add duration="20" location="Any" enabled="true"/> </outputCacheProfiles> </outputCacheSettings> </caching> <!---CacheProfile配置文件中设置缓存end-->
其实作用和效果还是一样,无非就是方便点,统一的配置参数都直接写webconfig文件里面。其实也可以Controller中写。
配置好了之后我们直接在控制器调用相应的名字的OutputCache特性标签即可。
[OutputCache(CacheProfile= "TestConfigCache")] public ActionResult Index() { ViewBag.CurrentTime = DateTime.Now; return View(); }
更多的方式,需要下去再研究下。

ABP中使用ICacheManager进行缓存管理

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydgxy.html