首页 > 编程语言 >C#WebApi 对数据进行缓存加快前请求数据的速度

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

时间:2023-10-21 21:11:56浏览次数:40  
标签:WebApi 缓存 return C# public using logger id

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);
}

 

标签:WebApi,缓存,return,C#,public,using,logger,id
From: https://www.cnblogs.com/zhulongxu/p/17779563.html

相关文章

  • CSP-S 2023游记
    2023.10.2110/2112:00还在过模板()专程请假润回家半天以为差不多能看完一遍知识点,结果还是没看完。平时总觉得没学啥东西,到关键的时候才感觉到这门竞赛的东西之多。连午觉都没时间睡,路上草草过了下莫队就到考场了。2:20坐到考场。监考老师在提醒考试期间不要打游戏,难绷2:30开题......
  • C/C++ C2679 二元“<<”: 没有找到接受“XXX”类型的右操作数的运算符(或没有可接受的
    今天在做一个C++项目时遇到了如下问题: 找了好久的百度,结果发现只要把这段报错的程序换一下位置,放到运算符重载函数的下面就可以了,因为编译器是按顺序执行的。。。 ......
  • 实验2 C语言分支与循环基础应用编程
    实验任务1#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1374#defineN2465intmain(){intnumber;inti;srand(time(0));for(i=0;i<N;++i){number=rand()%(N2-N1+1)+N1;pr......
  • CSP-S2023游记
    不知不觉也高二了呢,最后一年OI了。Day-??过了初赛。没什么难度。Day-4模拟赛挂分。RP++。Day-3模拟赛挂分。RP++。Day-2没挂分……?换数据了,又挂了。RP++。Day-1没挂分。但是今天是我生日,所以,陌生人,你可以住我生日快乐吗?RP++。Day0没有模拟赛,挂不了分了。......
  • 网络tcp与udp协议
    TCP协议TCP(transportcontrolprotocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然......
  • 揭秘计算机指令执行的神秘过程:CPU内部的绝密操作
    计算机指令从软件工程师的角度来看,CPU是执行计算机指令的逻辑机器。计算机指令可以看作是CPU能够理解的语言,也称为机器语言。不同的CPU能理解的语言不同。例如,个人电脑使用Intel的CPU,苹果手机使用ARM的CPU。这两种CPU支持的语言不同。这些不同CPU支持的语言被称为不同的指令集。......
  • 实验2 C语言分支与循环基础应用编程
    实验任务1源代码1#include<stdio.h>2#include<stdlib.h>3#include<time.h>45#defineN56#defineN13747#defineN246589intmain()10{11intnumber;12inti;1314srand(time(0));1516......
  • CSP2023
    CSP-J2023T4感觉提高组没这个难。暴力的做法是\(f_{u,i}\)表示到\(u\)的时间为\(i\)是否可行。不过发现如果\(f_{u,i}=1\),则\(f_{u,i+k}=1\),所以只需要记录\(f_{u,i}\)表示模\(k\)余\(i\)且可行的最小的\(j\)即可。CSP-S2023T1直接把所有操作一步到达的状......
  • LCR182
    某公司门禁密码使用动态口令技术。初始密码为字符串 password,密码更新均遵循以下步骤:设定一个正整数目标值 target将 password 前 target 个字符按原顺序移动至字符串末尾请返回更新后的密码字符串。 示例1:输入:password="s3cur1tyC0d3",target=4输出:"r1......
  • c++指针相关
    常量指针(PointertoConstant)定义:一个指向常量的指针。这意味着指针指向的值不能被修改,但指针本身可以被修改,即可以重新指向其他地址。声明:constType*pointerName;constint*p1;intx=10,y=20;p1=&x;//Valid*p1=50;//Errorp1=&y;//Valid指针......