首页 > 编程语言 >C#之缓存

C#之缓存

时间:2024-07-01 12:52:40浏览次数:16  
标签:返回 ... 缓存 C# 数据库 -- UI

原文链接:https://zhuanlan.zhihu.com/p/657458522

缓存指在中间层中存储数据的行为,该行为可使后续数据检索更快。 从概念上讲,缓存是一种性能优化策略和设计考虑因素。 缓存可以显著提高应用性能,方法是提高不常更改(或检索成本高)的数据的就绪性

既然缓存是是一种性能优化策略,那么就得考虑一下用在什么地方了。

我们先顺一下一般情况,我们是如何获取到数据的

UI展示层-->业务层-->数据库层-->然后执行SQL,从数据库获取数据-->返回到业务层-->返回到UI,进行展示

好了..这个时候,有一个场景,登录一个系统的时候,用户数据是不是基本上不会变化的... 你登录到系统里面,菜单是不是分配完成之后,也是基本上不会变化的

那么,每次登录我们都要去数据库查询一次 刷新页面也需要去数据库从新加载菜单,如果这个时候 你一分钟刷新60下...这酸爽..想想就很刺激

那么这个时候....引用这个性能优化策略 是什么情况呢? 我们把用户数据 或者 菜单数据 放到缓存里面...当我们需要这一部分的数据的时候 从缓存中拿 直接返回给前端 这样 数据库压力减小了...响应也变快了 性能就上来了

用上缓存之后 我们在顺一下请求情况

UI展示层-->业务层-->数据库层-->然后执行SQL,从数据库获取数据--->加入缓存->返回到业务层-->返回到UI,进行展示

我们加了一个缓存 第一次我们去数据库拿数据 拿到之后 放入缓存 然后返回展示层 这个时候 我们还需要就先去缓存里面查查看有没有这个缓存 有就直接返回了

如下图:

按照当前的业务形式 还有一个形式就是热点缓存...比较热门的数据 还可以在加一层缓存 就是缓存的缓存 当然这个还是需要看具体的业务

目前 经常使用的缓存有两种 一个是微软的Cache

  • System.Runtime.Caching.MemoryCache
  • Microsoft.Extensions.Caching.Memory.MemoryCache

还有一个是redis 很热门的一个内存数据库

使用上都差不多 根据Key进行查询和存储 redis支持数据类型比较多 也支持持久化 具体可以看看其他相关资料

微软的呢就比较人性了...简单好用,双手奉上链接

https://learn.microsoft.com/zh-cn/dotnet/core/extensions/caching

 

标签:返回,...,缓存,C#,数据库,--,UI
From: https://www.cnblogs.com/Dongmy/p/18277813

相关文章

  • 有关paddleocr在pyinstall中打包问题的解决方案
    借鉴网址python解决paddleocr打包问题_pyinstaller怎么解决paddleocr中的动态导入-CSDN博客在打包时我使用的spec文件如下:(需要将pathe和binaries换为自己的paddleocr路径)block_cipher=Nonea=Analysis(['main.py'],   pathex=['E:\\PyEnviroment\\Lib\\site-packages\\p......
  • RedirectView 你不知道的 URL重定向原理
    肖哥弹架构跟大家“弹弹”RedirectView业务使用与功能设计欢迎点赞,点赞,点赞。关注本人的公众号Solomon肖哥弹架构获取更多精彩内容RedirectView来实现URL重定向策略。这种技术可以用于优化网站结构、处理页面迁移或实现安全的登录跳转。类结构设计业务说明:大型......
  • C++使用typeid获取类型信息type_info机制解析
    目录一.环境二.基础用法三.编译期计算还是运行时计算1.实验一2.实验二3.实验三四.用法展示五.其他这篇文章讨论一下C++中typeid以及type_info的用法。一.环境windows11,VS2022二.基础用法1.需要明确一下typeid是操作符,不是函数,就像sizeof。2.typeid的操作对象可......
  • 初始docker
    前置知识通过面向对象的知识来了解docker中的镜像和容器就很好理解了,docker是C/S架构镜像:是一个只读的模板,可以用来创建容器。类容器:是docker的运行实例,提供了一个独立的可移植的环境,可以在这个环境中运行应用程序。实例,1个或多个docker仓库:用来存储docker镜像的地方,最......
  • LeetCode 1013. Partition Array Into Three Parts With Equal Sum
    原题链接在这里:https://leetcode.com/problems/partition-array-into-three-parts-with-equal-sum/description/题目:Givenanarrayofintegers arr,return true ifwecanpartitionthearrayintothree non-empty partswithequalsums.Formally,wecanpartition......
  • BigCodeBench: 继 HumanEval 之后的新一代代码生成测试基准
    HumanEval是一个用于评估大型语言模型(LLM)在代码生成任务中的参考基准,因为它使得对紧凑的函数级代码片段的评估变得容易。然而,关于其在评估LLM编程能力方面的有效性越来越多的担忧,主要问题是HumanEval中的任务太简单,可能不能代表真实世界的编程任务。相比于HumanEval中的......
  • linux内核 list_for_each_entry
    1.linux内核中的list用法在linus内核中,list一般这样使用:structlist_head{structlist_head*priv;structlist_head*next;}structxxx{intvalue;//结构体的真实成员structlist_head*lh;} 2.list遍历结构体xxx里面有structlist_head*lh......
  • c指针详解(2)--- 指针与数组
    在大致了解了c语言中变量在内存中的分配、存活等方面后,我们再来看看数组在内存中又是如何呈现的。这里我们就只讨论静态数组,动态数组涉及到动态内存分配,这里就不详细展开了。那么什么是静态数组呢?要理解这个数据结构,我们可以将其切分为两个概念:静态与数组。数组:数组其实就是一......
  • MATLAB|基于Copula理论的多风电场风电预测误差时空相关性建模研究
      ......
  • 【实际-有功-无功控制器的动态性能】【两级电压源变流器VSC】【采用电流控制的实际/无
     ......