ASP.NET Core 3.1系列(13) 您所在的位置:网站首页 api函数用于删除本地缓存文件 ASP.NET Core 3.1系列(13)

ASP.NET Core 3.1系列(13)

2024-06-29 00:08| 来源: 网络整理| 查看: 265

1、前言

在实际开发过程中,缓存(Cache)是一项重要技术。有时候为了缓解数据库访问的压力,我们可以将一些需要经常读取但又几乎不会变化的数据存在缓存里,以此加快数据的访问速度。在ASP.NET Core中,缓存一般分为本地缓存和分布式缓存。相较于分布式缓存(Redis),本地缓存并不会将数据写入磁盘中,它只是将数据存储在内存中进行操作,因此本地缓存的数据会随着应用程序的重启而丢失。一般情况下,如果需要存储的数据不多,同时也没有数据持久化的要求,则可以考虑使用本地缓存。下面开始介绍其使用方法。

2、本地缓存的读写操作 2.1、添加本地缓存服务

打开Startup.cs文件,添加本地缓存的相关服务,代码如下所示:

using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace App { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers(); // 启用本地缓存 services.AddMemoryCache(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } } 2.2、注入IMemoryCache接口

在ASP.NET Core中,我们只需要在Controller中注入IMemoryCache接口即可对缓存进行操作,代码如下所示:

using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; namespace App.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class HomeController : ControllerBase { private readonly IMemoryCache cache; /// /// 构造函数 /// /// public HomeController(IMemoryCache cache) { this.cache = cache; } } } 2.3、IMemoryCache常用方法 2.3.1、TryGetValue

TryGetValue可以根据key来判断某个缓存是否存在,代码如下所示:

using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; namespace App.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class HomeController : ControllerBase { private readonly IMemoryCache cache; /// /// 构造函数 /// /// public HomeController(IMemoryCache cache) { this.cache = cache; } /// /// 判断缓存是否存在 /// /// [HttpGet] public ActionResult Get() { if (cache.TryGetValue("UserName", out _)) { return "该缓存存在"; } else { return "该缓存不存在"; } } } } 2.3.2、Get和Set

Get和Set主要负责读取和写入缓存,代码如下所示:

using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; namespace App.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class HomeController : ControllerBase { private readonly IMemoryCache cache; /// /// 构造函数 /// /// public HomeController(IMemoryCache cache) { this.cache = cache; } /// /// 读写缓存 /// /// [HttpGet] public ActionResult Get() { // 写入缓存 cache.Set("UserName", "admin"); cache.Set("Password", "12345"); // 读取缓存 string userName = cache.Get("UserName"); string password = cache.Get("Password"); // 返回 return userName + "\n" + password; } } } 2.3.3、GetOrCreate

GetOrCreate可以实现:如果一个缓存值存在,则返回它,如果不存在,则创建该缓存后再返回它。代码如下所示:

using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; namespace App.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class HomeController : ControllerBase { private readonly IMemoryCache cache; /// /// 构造函数 /// /// public HomeController(IMemoryCache cache) { this.cache = cache; } /// /// 读写缓存 /// /// [HttpGet] public ActionResult Get() { string userName = cache.GetOrCreate("UserName", entry => { return "admin"; }); string password = cache.GetOrCreate("Password", entry => { return "12345"; }); return userName + "\n" + password; } } } 2.3.4、Remove

Remove可以实现缓存的删除。代码如下所示:

using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; namespace App.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class HomeController : ControllerBase { private readonly IMemoryCache cache; /// /// 构造函数 /// /// public HomeController(IMemoryCache cache) { this.cache = cache; } /// /// 删除缓存 /// /// [HttpGet] public ActionResult Get() { // 写入缓存 cache.Set("UserName", "admin"); cache.Set("Password", "12345"); // 删除缓存 cache.Remove("UserName"); cache.Remove("Password"); // 返回 return "缓存删除成功"; } } } 3、缓存的时间过期策略

一般情况下,缓存都是通过时间来判断是否过期的。常用的4种时间过期策略如下所示:

永不过期绝对时间过期滑动时间过期绝对时间过期+滑动时间过期 3.1、永不过期

永不过期是指在整个应用程序生命周期内,缓存不会过期。代码如下所示:

using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; using System.Threading; namespace App.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class HomeController : ControllerBase { private readonly IMemoryCache cache; /// /// 构造函数 /// /// public HomeController(IMemoryCache cache) { this.cache = cache; } /// /// 永不过期 /// /// [HttpGet] public ActionResult Get() { string msg = string.Empty; cache.Set("UserName", "admin"); // 读取缓存 for (int i = 1; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有