当前位置: 首页 > news >正文

ABP理论学习之缓存Caching

本篇目录

  • 介绍
  • ICacheManager
  • ICache
  • ITypedCache
  • 配置

介绍

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<int, Item> myCache = _cacheManager.GetCache("MyCache").AsTyped<int, Item>();

这样,我们不需要转换就可以使用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,如需转载请自行联系原作者


相关文章:

  • Linux GPIO控制方法
  • “双十二”:“交互+交易+交付”融合运营为王
  • 直接拿来用,最火的.NET开源项目
  • FAQ宝典之Rancher Server
  • Kali Linux渗透测试实战 2.2 操作系统指纹识别
  • Git:pull --rebase 和 merge --no-ff
  • 数据库模块(2天)(sql基础主键,外键,唯一索引)最重要连表查询
  • Neo4j embedded例子
  • win10编译caffe跑faster-rcnn(cuda7.5)
  • iOS计步器实例
  • 多线程
  • SmoOne——开源免费的企业移动OA应用,基于.Net
  • Configuring Zookeeper Cluster
  • Kubernetes集群测试环境搭建
  • 51 N QUEENS
  • JavaScript-如何实现克隆(clone)函数
  • SegmentFault for Android 3.0 发布
  • 分享一款快速APP功能测试工具
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • CAP理论的例子讲解
  • docker python 配置
  • If…else
  • Java精华积累:初学者都应该搞懂的问题
  • 技术胖1-4季视频复习— (看视频笔记)
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端工程化(Gulp、Webpack)-webpack
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 山寨一个 Promise
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 应用生命周期终极 DevOps 工具包
  • Semaphore
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • # .NET Framework中使用命名管道进行进程间通信
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • .NET 4.0中的泛型协变和反变
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET 命令行参数包含应用程序路径吗?
  • .NET/C# 的字符串暂存池
  • .NET/C# 使用反射注册事件
  • .Net8 Blazor 尝鲜
  • .net生成的类,跨工程调用显示注释
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [14]内置对象
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [CF407E]k-d-sequence
  • [CQOI 2011]动态逆序对