博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ABP理论学习之缓存Caching
阅读量:6508 次
发布时间:2019-06-24

本文共 1935 字,大约阅读时间需要 6 分钟。

本篇目录

介绍

ABP提供了缓存的抽象,它内部使用了这个缓存抽象。虽然默认的实现使用了MemoryCache,但是也可以为其他的缓存提供者进行实现和改变。

ICacheManager

缓存的主要接口是ICacheManager。我们可以注入该接口,然后使用该接口获得一个缓存对象。例如:

public class TestAppService : ApplicationService{    private readonly ICacheManager _cacheManager;    public TestAppService(ICacheManager cacheManager)    {        _cacheManager = cacheManager;    }    public Item GetItem(int id)    {        //从缓存中获取        return _cacheManager                .GetCache("MyCache")                .Get(id.ToString(), () => GetFromDatabase(id)) as Item;    }    public Item GetFromDatabase(int id)    {        //... 从数据库中检索    }}

在这个例子中,我们注入了ICacheManager,并获取了一个叫做MyCache的缓存对象。

警告:GetCache方法

不要在构造函数中使用GetCache方法。如果你的类是transient(每次使用都会创建)的,那么这可能会释放缓存,因为第二次创建类的对象时,会再次调用构造函数,之前的第一次的缓存可能会被释放。

ICache

ICacheManager.GetCache方法返回一个ICache。缓存对象是单例的,第一次请求时会创建缓存,以后都是返回相同的缓存对象。因此,我们可以在不同的类(客户端)中共享具有相同名字的相同缓存。

在样例代码中,我们看到了ICache.Get方法的简单使用。它有两个参数:

  • key:缓存中一个条目的唯一字符串键。
  • 工厂:没有找到给定key的缓存条目时调用的action。工厂方法应该创建并返回实际的条目。如果给定的key在缓存中找到了,那么不会调用该action。

ICache接口也有像GetOrDefault,Set,Remove,Clear的方法。同时,这些方法也有异步(async)版本。

ITypedCache

ICache接口的key为string类型,value为object类型。ITypeCache是ICache的包装器,提供类型安全、泛型的cache。为了将ICache转为ITypedCache,我们可以使用AsTyped扩展方法,如下所示:

ITypedCache
myCache = _cacheManager.GetCache("MyCache").AsTyped
();

这样,我们不需要转换就可以使用Get方法。

配置

默认的缓存有效期是60min。因此,如果你在60min内都没有使用缓存中的元素,那么它会自动从缓存中移除。对于所有的缓存或者特定的某个缓存,你都可以配置有效期。

//为所有缓存配置有效期Configuration.Caching.ConfigureAll(cache =>{    cache.DefaultSlidingExpireTime = TimeSpan.FromHours(2);});//为特定的缓存配置有效期Configuration.Caching.Configure("MyCache", cache =>{    cache.DefaultSlidingExpireTime = TimeSpan.FromHours(8);});

这些代码应该放到模块中的PreInitialize方法中。有了这样的配置,MyCache会有8小时的有效期,而其他cache会有2小时有效期。

一旦cache首次创建(第一次请求时),就会调用配置的action。配置并不只局限于DefaultSlidingExpireTime(默认滚动有效期),因为cache对象是一个ICache,你可以使用它的属性和方法自由地配置并初始化。

本文转自tkbSimplest博客园博客,原文链接:http://www.cnblogs.com/farb/p/ABPCaching.html,如需转载请自行联系原作者

你可能感兴趣的文章
#define WIN32_LEAN_AND_MEAN 的作用
查看>>
仿余额宝数字跳动效果 TextCounter
查看>>
你必须知道的.net学习总结
查看>>
Axure8.0 网页 or App 鼠标滚动效果
查看>>
大家好,新年快乐。
查看>>
Android学习路线
查看>>
Linux下的redis的持久化,主从同步及哨兵
查看>>
在相同的主机上创建一个duplicate数据库
查看>>
Date15
查看>>
从Date类型转为中文字符串
查看>>
基于multisim的fm调制解调_苹果开始自研蜂窝网调制解调器 最快2024年能用上?
查看>>
mupdf不支持x64_Window权限维持(七):安全支持提供者
查看>>
labview如何弹出提示窗口_LabVIEW开发者必读的问答汇总,搞定疑难杂症全靠它了!...
查看>>
hikariconfig mysql_HikariConfig配置解析
查看>>
mysql批量数据多次查询数据库_mysql数据库批量操作
查看>>
jquery 乱码 传参_jquery获取URL中参数解决中文乱码问题的两种方法
查看>>
JDBC_MySQL_jdbc连接mysql_MySQL
查看>>
mysql cte的好处_Mysql 8 重要新特性 - CTE 通用表表达式
查看>>
zcu106 固化_xilinx zcu106 vcu demo
查看>>
java ftpclient 代码_java后台代码ftpclient下载文件
查看>>