ABP vNext 缓存使用

本文介绍ABP框架下的缓存技术实现,包括本地缓存和分布式缓存的配置与使用方法,通过具体示例展示了如何在.NET Core Web API项目中应用这两种缓存模式。

缓存在 App 中的应用

应用系统缓存流程

缓存(cache)工作原理

说到缓存,我们来看下百度百科的介绍:

  1. 缓存(cache),原始意义是指访问速度比一般 随机存取存储器(RAM) 快的一种 高速存储器,通常它不像系统主存那样使用 DRAM 技术,而使用昂贵但较快速的 SRAM 技术。缓存的设置是所有现代计算机系统发挥高性能的重要因素之一。

    • 动态随机存取存储器(Dynamic Random Access Memory,DRAM
    • 静态随机存取存储器(Static Random-Access Memory,SRAM
  2. 目的:提高数据存取速度(缓存性能优化 万金油 )。

在应用系统中通常会使用到缓存(cache)技术,其中应用系统多级缓存的工作原理大概介绍如下:

App应用系统多级缓存

说明:在 App 系统中存在多级缓存时,按顺序读取,从一级缓存(Level 1 Cache,简称L1 Cache)逐级往下获取。

项目环境准备

上一篇文章 我们介绍了 .net6 平台的 asp.net core webapi 框架中如何使用 ABP vNext 框架,本篇文章我们继续使用上次创建的 Demo.Abp.WebApplication1 项目,新增如下 NuGet 包文件:

  • Volo.Abp.Caching,本地缓存;
  • Volo.Abp.Caching.StackExchangeRedis,分布式缓存(Redis);

说明:Volo.Abp.Caching.StackExchangeRedis 包已经包含 Volo.Abp.Caching 包。

一、添加 NuGet 包文件

Demo.Abp.WebApplication1 项目中所有的 nuget packages 文件:

Volo.Abp packages

说明:在 上篇文章 中,ABP vNext 的这些 nuget packages 文件还未发布 v6.0.0 正式版,生产环境中推荐使用正式稳定版。关于 asp.net core webapi 项目如何遵循 Module(模块化)改造的具体细节,此处不再详细介绍。

添加完成上图的 nuget packages 后,查看 Demo.Abp.WebApplication1.csproj 完整的工程项目文件,如下所示:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Volo.Abp.AspNetCore" Version="6.0.0" />
    <PackageReference Include="Volo.Abp.Caching" Version="6.0.0" />
    <PackageReference Include="Volo.Abp.Caching.StackExchangeRedis" Version="6.0.0" />
    <PackageReference Include="Volo.Abp.Swashbuckle" Version="6.0.0" />
  </ItemGroup>

</Project>

项目结构如下:

Demo.Abp.WebApplication1

二、改造 ApiController 类及相关文件

此处为了模拟业务操作从数据库获取数据,在 WeatherForecastController 控制器中添加一个获取数据的方法:

// 模拟数据库获取数据
private async Task<WeatherForecast> GetWeatherForecastAsync(Guid guid)
{
   
   
   _logger.LogDebug($"{
     
     DateTime.Now:G},查询数据库数据...");

   var index = Random.Shared.Next(-2, 3);
   var data = new WeatherForecast
   {
   
   
      Id = Guid.NewGuid(), // WeatherForecast 模型新增 Id 字段
      Date = DateTime.Now.AddDays(index),
      TemperatureC = Random.Shared.Next(-20, 55),
      Summary = Summaries[Random.Shared.Next(Summaries.Length)]
   };

   return await Task.FromResult(data);
}

WeatherForecast 模型新增 Id 字段。

namespace Demo.Abp.WebApplication1;

public class WeatherForecast
{
   
   
    public Guid Id {
   
    get; set; }
    public DateTime Date {
   
    get; set; }
    public int TemperatureC {
   
    get; set; }
    public int TemperatureF => 32 + (int)(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChaITSimpleLove

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值