版主: Carl880
昵称:保罗5
等级:
Lv.93 
经验
8981
金币
37.84万
积分
51
 发表于 2021-08-16 22:35  查看 1159 | 倒序浏览
Redis,ABP

1. 引言

创建任务时我们需要指定分配给谁,Demo中我们使用一个下拉列表用来显示当前系统的所有用户,以供用户选择。我们每创建一个任务时都要去数据库取一次用户列表,然后绑定到用户下拉列表显示。如果就单单对一个demo来说,这样实现也无可厚非,但是在正式项目中,显然是不合理的,浪费程序性能,有待优化。
说到优化,你肯定立马就想到了使用缓存。是的,缓存是提高程序性能的高效方式之一。
这一节我们就针对这一案例来看一看Abp中如何使用缓存来提高程序性能。

2. Abp的缓存机制

在直接使用缓存之前,我们还是来简单梳理下Abp的缓存机制。
Abp之所以能成为一个优秀的DDD框架,我想跟作者详细的文档有很大关系,
作者已经在ABP官方文档介绍了如何使用Caching,英文水平好的就直接看官方的吧。

Abp对缓存进行抽象定义了ICache接口,位于Abp.Runtime.Caching命名空间。
并对ICache提供了默认的实现AbpMemoryCache,AbpMemoryCache是基于MemoryCache的一种实现方式。MemoryCache是微软的一套缓存机制,定义在System.Runtime.Caching命名空间,顾名思义 ,在内存中进行高速缓存。我们通过类型依赖图来看下Abp对Cache的实现:


Redis,ABP

从图中可以看出主要包括四个部分:

  • ICache->CacheBase->AbpMemoryCache:对缓存的抽象以及实现;
  • ITypedCache:缓存的泛型实现;
  • ICacheManager->CacheManagerBase->AbpMemoryCacheManager:缓存管理类的抽象和实现,代码中可以通过注入ICacheManager来获取缓存;
  • ICachingConfiguration->CachingConfiguration:用来配置使用哪种缓存。

3. Abp缓存实操演练

3.1. 定位优化点

定位到我们的TasksController,其中有两种创建Task的Action,代码如下:

public PartialViewResult RemoteCreate() { var userList = _userAppService.GetUsers();
    ViewBag.AssignedPersonId = new SelectList(userList.Items, "Id", "Name"); return PartialView("_CreateTaskPartial");
}

[ChildActionOnly] public PartialViewResult Create() { var userList = _userAppService.GetUsers();
    ViewBag.AssignedPersonId = new SelectList(userList.Items, "Id", "Name"); return PartialView("_CreateTask");
}

可以看到两个方法都需要调用_userAppService.GetUsers();来获取用户列表。
现在我们来使用缓存技术对其优化。首先我们应该想到了Asp.net mvc自带的一套缓存机制,OutputCache。



快速回帖