ASP.NETCore中的缓存

章节目录
          一.客户端响应缓存

                      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里声明封装接口

 第三步:未完待续......

猜你喜欢

转载自blog.csdn.net/qq_71012549/article/details/128473954
今日推荐