C#之缓存
原文链接: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