[Architect] ABP(现代ASP.NET样板开发框架)(9) Caching

本节目录

  • 介绍
  • ICacheManager
    • WARNING: GetCache Method
  • ICache
  • ITypedCache
  • Configuration

介绍

Abp提供了1个缓存的抽象.内部使用这个缓存抽象.虽然默认的实现使用MemoryCache,但是可以切换成其他的缓存.

 

ICacheManager

提供缓存的接口为ICacheManager.我们可以注入并使用他.如:

public class TestAppService : ApplicationService
{
    private readonly ICacheManager _cacheManager;

    public TestAppService(ICacheManager cacheManager)
    {
        _cacheManager = cacheManager;
    }

    public Item GetItem(int id)
    {
        //Try to get from cache
        return _cacheManager
                .GetCache("MyCache")
                .Get(id.ToString(), () => GetFromDatabase(id)) as Item;
    }

    public Item GetFromDatabase(int id)
    {
        //... retrieve item from database
    }
}

在上例中,我们注入ICacheManager 并且获得1个名为MyCache的缓存.

 

WARNING: GetCache Method

不要在你的构造函数中使用GetCache方法.如果你的类是transient,这可能会释放Cache.

 

ICache

ICacheManager.GetCache 方法会返回1个ICache.每个Cache都是单例的.在第一次请求时创建,然后一直使用相同的cache实例.所以,我们共享cache在不同的class中.

ICache.Get方法有2个参数:

  • key: 在cache中唯一的字符串.
  • factory: 在给定的key上,未找到对应的item时. Factory method 应该创建并返回对应的item.如果在cache中能找到,则不会调用该Action.

ICache interface also has methods like GetOrDefaultSetRemove and Clear. There are also async versions of all methods.

ICache 接口还提供了一些如 GetOrDefaultSetRemove and Clear的方法.同样提供了所有方法的async版本.

 

ITypedCache

ICache 接口是以string为key,object为value.ITypedCache 包装了ICache提供类型安全,泛型cache.将ICache转为ITypedCache,我们需要使用AsTyped 扩展方法:

ITypedCache<int, Item> myCache = _cacheManager.GetCache("MyCache").AsTyped<int, Item>();

然后我们使用Get方法,就不需要做手动转换.

 

Configuration

默认的cache expire time为60min.这是滑动过期方式.所以当你不使用1个item超过60分钟时,则会自动从缓存中移除.你可以为所有cache或1个cache做配置.

//Configuration for all caches
Configuration.Caching.ConfigureAll(cache =>
{
    cache.DefaultSlidingExpireTime = TimeSpan.FromHours(2);
});

//Configuration for a specific cache
Configuration.Caching.Configure("MyCache", cache =>
{
    cache.DefaultSlidingExpireTime = TimeSpan.FromHours(8);
});

这种代码应该放在module的 PreInitialize 方法中.如上代码中,MyCache 将会有8小时的expire time,而其他的cache有2小时.

你的配置Action只会在第一次请求时调用一次.除了expire time外,还可以自由配置和初始化ICache.

你可能感兴趣的:([Architect] ABP(现代ASP.NET样板开发框架)(9) Caching)