章节目录
一.客户端响应缓存
1.语句
二. 服务器端响应
1.语句
三.内存缓存(In-memery cache)
1.什么是内存缓存
2.语句
3.案例
四..缓存过期时间
1.Remove或者Set的用法
2.过期时间有两种
3.绝对过期时间的用法
4. 滑动过期时间的用法
5. 两者混合使用的用法
五.缓存穿透
1.什么是缓存穿透
2.缓存穿透的解决方法
六.缓存雪崩
1.什么原因导致的
2.解决方法
七.分布式缓存
1.什么是分布式缓存
2.分布式缓存的特点
3.分布式缓存的种类
4.分布式缓存的用法
一.客户端响应缓存
1.语句
[ResponseCache(Duration = 要缓存的时间)]
二. 服务器端响应(不推荐使用)
1.语句
app.UseResponseCaching();写在 app.MapControllers();的前边
cache-control:no-cache:当浏览器向服务器发起请求时,请求头带cache-control:no-cache是缓存就被禁止了。(每次输出的结果是不一样的没有缓存了)
三.内存缓存(In-memery cache)
1.什么是内存缓存
(1)把缓存数据放到应用程序的内存。内存缓存中保存的是一系列的键值对,就像Dictionary类型一样。
(2)内存缓存的数据保存在当前运行的网站程序中的内存中,适合进程相关的。因为在web服务中,多个不同网站使运行在不同的进程中的,因此不同网站的内存韩村是不会相互干扰的,而且网站重启后,内存缓存中的所有数据也就都被清空了。
2.语句:
注册服务 builder.Services.AddMemoryCache();
3.案例
在controllers中 注入实现类
GetOrCreate()方法的使用
第一步在MyContext中写一个异步方法
第二步:在Controller中写 GetOrCreate()方法
第三步:配置日志打印出来一遍看运行结果
四..缓存过期时间
解决办法:在数据改变的时候调用Remove或者Set来删除或者修改缓存(优点:及时);过期时间(只要过期时间比较短,缓存数据不一致的情况也不会持续很长时间。)
1.Remove或者Set适用于快速更新数据的(比如金融功能)
2.过期时间有两种:绝对过期时间、滑动过期时间
3.绝对过期时间(GetOrCreatAsync()方法的回调方法中有一个ICacheEntry类型的参数,通过ICacheEntry对当前的缓存项做设置,AbsoluteeExpirationRelativeToNow用来设定缓存项的绝对过期时间)(经常用)
4. 滑动过期时间(只要在缓存没过期的时候请求一次,缓存自动续命一段时间)(用的比较少)
语句:e.SlidingExpiration = TimeSpan.FromSecongs(10);
5. 两者混合使用(偶尔用)
语法:
五.缓存穿透
1.什么是缓存穿透
当用set和get方法时去获取数据时可能本身数据库没有这个数据得到null,然后还反复去获取这个数据,结果导致反复调用数据库里的数据给数据库造成很大的压力。
2.缓存穿透的解决方法
把查不到也当成一个数据放入缓存中用GetOrCreateAsync方法即可,因为他会把null值也当成合法的缓存值。(因此调取只用GetOrCreateAsync就可以了)
六.缓存雪崩
1.什么原因导致的:(1)缓存项集中过期引起缓存雪崩(2)数据混乱
2.解决方法(1)的:在基础过期时间上,再加一个随机的过期时间
语句:e.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(Random.Shared.Next(10,15));
3.解决方法(2)的:合理设置key
七.分布式缓存
1.什么是分布式缓存
分布式缓存能够处理大量的动态数据,因此比较适合应用在Web 2.0时代中的社交网站等需要由用户生成内容的场景。从本地缓存扩展到分布式缓存后,关注重点从CPU、内存、缓存之间的数据传输速度差异也扩展到了业务系统、数据库、分布式缓存之间的数据传输速度差异。
2,分布式缓存的特点
分布式缓存由一个服务端实现管理和控制,有多个客户端节点存储数据,可以进一步提高数据的读取速率。那么我们要读取某个数据的时候,应该选择哪个节点呢?如果挨个节点找,那效率就太低了。因此需要根据一致性哈希算法确定数据的存储和读取节点。以数据D,节点总个数N为基础,通过一致性哈希算法计算出数据D对应的哈希值(相当于门牌号),根据这个哈希值就可以找到对应的节点了。一致哈希算法的好处在于节点个数发生变化(减少或增加)时无需重新计算哈希值,保证数据储存或读取时可以正确、快速地找到对应的节点。分布式缓存能够高性能地读取数据、能够动态地扩展缓存节点、能够自动发现和切换故障节点、能够自动均衡数据分区,而且能够为使用者提供图形化的管理界面,部署和维护都十分方便。分布式缓存已经在分布式领域、云计算领域得到了广泛的应用
3.分布式缓存的种类
4.分布式缓存的用法
1.安装语句:Install-Package Microsoft.Extensions.Caching.StackExchangeRedis -Version 7.0.1
2.(前提是要已经安装好了Redis的服务器)
在Program.cs里边Add.StackExchangeRedisCache注册相关服务
options.Configuration = "localhost"这个语句是要连接哪一个Redis服务器
options.lnstanceName= "ZXY";为了避免自己存的key和别人的冲突
第一步:
第二步:在controller里声明封装接口
第三步:未完待续......