一、本地缓存
设计思路
查询数据时先查看本地缓存中是否有数据,如果有数据直接返回,如果没有数据,到数据库查询后添加到本地缓存,并将数据返回。
优缺点
缺点
Memory是服务器内存的缓存,如果并发量大并查询的数据不一致,会造成内存非常大,同时会造成GC不断的回收内存,由于Memory内部使用的是静态变量,造成内存无法回收,GC每回收一次,就会耗费一次CPU资源,如果GC回收的频率比较大,大么耗费的CPU资源就较大。
解决方案:1.设置缓存时间。2.设置缓存大小。
优点
数据读写速度时间缩短,性能提升。
使用
安装Nuget包
Microsoft.Extensions.Caching.Memory
Startup.cs注册
//ConfigureServices方法中注册缓存服务
Service.AddMemoryCache(options=>{
options.SizeLimit = 1024*1024*100; //设置缓存大小
});
使用方法
//在构造方法中注入
private readonly IMemoryCache memoryCache;
构造函数 (IMemoryCache _memoryCache)
{
memoryCache =_memoryCache;
}
//测试对象
Person per = new Person();
//查询缓存方法
//memoryCache.Get<Person>(key);
//为了放防止多线程并发
bool flag = memoryCache.TryGetValue<缓存对象>(key,out per);
//true:有数据 false:无数据
//限制缓存大小
var cacheEntryOptions = new MemoryCacheEntryOptions().
//设置单个缓存大下
SetSize(1024).
//设置过期时间 自动失效
SetSlidingExpiration(TimeSpan.FromSeconds(3));
//添加缓存
memoryCache.Set<Person>(key,value,cacheEntryOptions);
二、分布式缓存
简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。
原理
Redis数据库中的数据时存放在内存中,并非磁盘中,不需要把每次查询进行IO操作。把使用的数据查询加载的内存中,在内存中操作,提升查询效率。
使用场景
1.任何可丢失数据。2.不经常变动的数据。
使用方式
在appsetting.json添加Redis配置
"ConnectionStrings: RedisCaching节点配置信息
{
"ConnectionStrings": {
"ConnectionString": "Data Source=127.0.0.1;Initial Catalog=db;User ID=uid;Password=123456;Pooling=True;Max Pool Size=512;Connect Timeout=500;",
"JwtSetting": {
"Issuer": "jwtIssuer", //颁发者
"Audience": "jwtAudience", //可以给哪些客户端使用
"SecretKey": "chuang