流浪のwolf

卷帝

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

C#WebApi 对数据进行缓存加快前请求数据的速度

复制代码
using ClassLibrary1;
using ClassLibrary2;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging;
using WebApplication1.IServices;
using WebApplication1.Utility.SwaggerExt;

namespace WebApplication1.Controllers
{
    public class HomeController :BaseController
    {
        public readonly ILogger<HomeController> logger;
        public HomeController(IMemoryCache memoryCache, ILogger<HomeController> logger) : base(memoryCache)
        {
            this.logger = logger;
        }

        /// <summary>
        /// 测试缓存API
        /// 创建缓存  CreateEntry
        /// 删除缓存  Remove
        /// 获取换粗 TryGetValue  
        /// </summary>
        /// <param name="i"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        [HttpGet]
        public async Task<ActionResult<Book?>> GetBookById(long id)
        {
            //Book? result = MyDbContext.GetById(id);
            //// 没有从数据库找到对应的书籍信息
            //if(result == null)
            //{
            //    return NotFound($"找不到id={id}书籍");
            //}else
            //{
            //    return result;
            //}

            // GetOrCreateAsync 方法如果没有找到 key 值的缓存 就会走回调函数 返回所需要的数据 并在缓存创建相应的缓存
            logger.LogDebug($"开始执行缓存API测试ID = ${id}");
            Book? b =  await memoryCache.GetOrCreateAsync("Book" + id, async (e) =>
            {
                logger.LogDebug($"缓存 中没有找到需要查找的数据,到数据库查询 ID={id}");
                return await MyDbContext.GetByIdAsync(id);
            });
            logger.LogDebug($"GetOrCreateAsync结果{b}");
            if (b == null)
            {
                return NotFound($"找不到id={id}书籍");
            }else
            {
                return Ok(b);
            }
        }
    }
}
复制代码

Book 类:

namespace WebApplication1
{
    public  record Book(long id,string name);
}

 

posted on   朱龙旭的网络  阅读(163)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Blazor Hybrid适配到HarmonyOS系统
· 支付宝 IoT 设备入门宝典(下)设备经营篇
· 万字调研——AI生成内容检测
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
历史上的今天:
2022-10-21 打包项目的时候出错 Multiple assets emit different content to the same filename index.html
2022-10-21 yarn 和 npm 不能混合使用
2022-10-21 路由守卫有哪些 ?
点击右上角即可分享
微信分享提示