首页
学习
活动
专区
圈层
工具
发布

.net 温故知新【14】:Asp.Net Core WebAPI 缓存

那么在Asp.net Core 中只需要在接口上打上ResponseCacheAttribute并设置max-age的时间即可。...首先建一个Asp.Net Core WebAPI 项目,写一个获取学生的Get接口。...Name { get; set; } public int Age { get; set; } } } 在接口中我返回Student的age为1-100的随机数。...通过该方法传入缓存的key和func 委托方法返回值来进行查询并缓存,如果没查询到返回的null也会存储在缓存中,防止恶意查询不存在的数据。...上面的例子,我们设置绝对过期时间是20秒,我们将滑动过期设置5秒,在5秒内有持续访问就一直续命,直到20秒绝对过期。 那么如果没人访问,在5秒后就过期了,这样数据下次访问也能及时查询最新数据。

96320
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    NetCore的缓存使用详例

    通过缓存,可以比从数据源返回的数据的副本速度快得多。 应该对应用进行编写和测试,使其 永不 依赖于缓存的数据。 ASP.NET Core 支持多个不同的缓存。...最简单的缓存基于 IMemoryCache。 IMemoryCache 表示存储在 web 服务器的内存中的缓存。 在服务器场上运行的应用 (多台服务器) 应确保会话在使用内存中缓存时处于粘滞状态。...缓存指南 代码应始终具有回退选项,以获取数据,而 不是依赖于可用的缓存值。 缓存使用稀有资源内存,限制缓存增长: 不要 使用外部 输入作为缓存键。 使用过期限制缓存增长。...(IMemoryCache memoryCache) { _memoryCache = memoryCache; } } 最基本的使用 Set方法根据Key设置缓存,默认缓存不过期...Console.WriteLine(_memoryCache.Get(cacheKey)); } IMemoryCache提供一些好的语法糖供开发者使用,具体内容看下方文档 /// <summary

    93920

    小逗逼的连载-7.NetCore的缓存使用详例

    缓存可以减少生成内容所需的工作,从而显著提高应用程序的性能和可伸缩性。 缓存最适用于不经常更改的 数据,生成 成本很高。 通过缓存,可以比从数据源返回的数据的副本速度快得多。...应该对应用进行编写和测试,使其 永不 依赖于缓存的数据。 ASP.NET Core 支持多个不同的缓存。 最简单的缓存基于 IMemoryCache。 ...IMemoryCache 表示存储在 web 服务器的内存中的缓存。 在服务器场上运行的应用 (多台服务器) 应确保会话在使用内存中缓存时处于粘滞状态。...(IMemoryCache memoryCache) { _memoryCache = memoryCache; } } 最基本的使用 Set方法根据Key设置缓存,默认缓存不过期...Console.WriteLine(_memoryCache.Get(cacheKey)); } IMemoryCache提供一些好的语法糖供开发者使用,具体内容看下方文档 /// <summary

    56500

    《ASP.NET Core 与 RESTful API 开发实战》-- (第7章)-- 读书笔记(上)

    第 7 章 高级主题 7.1 缓存 缓存是一种通过存储资源的备份,在请求时返回资源备份的技术。...ASP.NET Core 支持多种形式的缓存,既支持基于 HTTP 的缓存,也支持内存缓存和分布式缓存,还提供响应缓存中间件 HTTP 缓存,服务端返回资源时,能够在响应消息中包含 HTTP 缓存消息头...验证缓存资源的方式有两种: 通过响应消息头中的 Last-Modified 使用实体标签消息头 ASP.NET Core 提供的 [ResponseCache] 特性能够为资源指定 HTTP 缓存行为...Mapper { get; set; } public IRepositoryWrapper RepositoryWrapper { get; set; } public IMemoryCache...,由多个应用服务器共享 ASP.NET Core 使用分布式缓存,需要用到 IDistributedCache ASP.NET Core 提供了 IDistributedCache 接口的3种实现方式:

    75320

    全新升级的AOP框架Dora.Interception: 编程体验

    由于Dora.Interception建立在依赖注入框架之上,所以我们可以在构造函数中注入依赖的对象,在这里我们就注入了用来缓存返回值的IMemoryCache 对象。...在利用它们生成代码缓存键的Key对象之后,我们利用构造函数中注入的IMemoryCache 对象确定是否存在缓存的返回值。...如果存在,我们直接调用InvocationContext 对象的SetReturnValue方法将它设置为方法返回值,并直接“短路”返回,目标方法将不再执行。...由于输出的间隔被设置为1秒,如果方法的返回值被缓存,那么输出的时间是相同的,下图所示的输出结果体现了这一点(源代码)。...>方法和SetReturnValue提起参数和设置返回值。

    71760

    MemoryCache:内存缓存

    public static void AddMemoryCacheSetup(this IServiceCollection services) { if (services == null...cache; public BlogCacheAOP(ICaching cache) { _cache = cache; } } 2、用法 // 获取缓存值...var cacheValue = _cache.Get(cacheKey); // 设置缓存 _cache.Set(cacheKey, response, 10); 三、可以直接使用官方的缓存接口 IMemoryCache...,效果是一样的,只不过自定义的可以做扩展,举例来说 private readonly IMemoryCache _cache; //还是通过构造函数的方法,获取 public DemoService(IMemoryCache...采用最新的前后端完全分离技术【 ASP.NET Core Api 6.0 + Vue 2.x 】,并结合 IdentityServer4 ,可快速解决多客户端和多资源服务的统一认证与鉴权的问题,以及整合较为完善的数据权限控制

    55070

    全新升级的AOP框架Dora.Interception

    由于Dora.Interception建立在依赖注入框架之上,所以我们可以在构造函数中注入依赖的对象,在这里我们就注入了用来缓存返回值的IMemoryCache 对象。...在利用它们生成代码缓存键的Key对象之后,我们利用构造函数中注入的IMemoryCache 对象确定是否存在缓存的返回值。...如果存在,我们直接调用InvocationContext 对象的SetReturnValue方法将它设置为方法返回值,并直接“短路”返回,目标方法将不再执行。...由于输出的间隔被设置为1秒,如果方法的返回值被缓存,那么输出的时间是相同的,下图所示的输出结果体现了这一点(源代码)。...>方法和SetReturnValue提起参数和设置返回值。

    43010

    【愚公系列】2022年12月 Redis数据库-缓存雪崩和缓存穿透问题的解决

    如果使用的时候想设置缓存是永久有效的,此时这个值将导致无法设置缓存永久有效,需要将该值改为0(或负数) 设置为0 或者 负数,不生效 4、全局注册:builder.Services.AddScoped的时候想设置缓存是永久有效的,此时这个值将导致无法设置缓存永久有效,需要将该值改为0(或负数) /// (3).设置为0 或者 负数,不生效 /// </param...SetCacheRandomTime(cacheEntry, defaultExpireSecondes); } //2.2 返回值赋值 (这个值来源于委托的调用...SetCacheRandomTime(cacheEntry, defaultExpireSecondes); } //2.2 返回值赋值 (这个值来源于委托的调用...至于缓存穿透,通常采用cache null策略,表现在调用的时候,对目标值不判空,直接存入缓存即可 2.2 依赖 nuget安装:Microsoft.Extensions.Caching.Memory

    74020

    关于 ASP.NET 内存缓存你需要知道的 10 点

    上述代码在 Index() 这个 action 中设置了一个缓存项。这是通过使用 IMemoryCache 的 Set() 来完成的。Set() 方法的第一个参数是键名,用来标识该数据项。...如果该数据项存在的话,就会被返回并且被赋值给 timestamp 这个字符串变量。然后这个 timestamp 的值就会被传递给 Show 视图。...第一种办法使用了你早先用过的同一个 Get() 方法,这一次它被拿来跟 if 块一起用。如果 Get() 不能在缓存中找到指定的数据项,IsNullOrEmpty() 就会返回 true。...TryGet() 方法会返回一个布尔值来指明数据项有没有被找到。实际的数据项可以使用一个输出参数拉取出来。如果 TryGet() 返回false,Set() 就会被用来添加数据。 6....等你将 AbsoluteExpiration 和 SlidingExpiration 的值设置后, Set() 方法就可以被用来将一个数据项添加到缓存。

    1.5K20

    ASP.NET Core 6框架揭秘实例演示:内存缓存与分布式缓存的使用

    对于像ASP.NET这种支持依赖注入应用开发框架来说,采用注入的方式来使用IMemoryCache对象是推荐的编程方式。...如上面的代码片段所示,用于返回当前时间的GetCurrentTime方法在执行的时候会调用IMemoryCache对象的TryGetValue方法,该方法根据指定的Key(“CurrentTime...如果通过该方法的返回值确定时间尚未被缓存,它会调用Set方法对当前时间予以缓存。我们的演示程序会以一秒的间隔五次调用这个GetCurrentTime,并将返回的时间输出控制台上。...当缓存数据被保存到Redis数据库中的时候,对应的Key以InstanceName为前缀。应用程序启动后(确保Redis服务器被正常启动),如果我们利用浏览器来访问它,依然可以得到与图1类似的输出。...对于演示实例缓存的时间戳,它会以图7所示的形式保存在我们创建的缓存表(AspnetCache)中。与基于Redis数据库的存储方式类似,与缓存数据的值一并存储的还包括缓存的过期信息。

    1.4K30

    重新整理 .net core 周边阅读篇————AspNetCoreRateLimit

    上面大概翻译是: AspNetCoreRateLimit 是ASP.NET Core 访问速率限制的解决方案,设计基于ip地址和客户端id用于控制用于web api和 mvc app的客户端访问速率。...这个包包含了IpRateLimitMiddleware and a ClientRateLimitMiddleware两个中间件,用这两个中间件你根据不同的场景能设置几种不同的限制, 比如限制一个客户端或者一个..._options.IpPolicyPrefix,这个值如果是分布式那么应该值得关注一下,因为我们有不同应用服务,如果希望不同的应用服务用到不同的ip限制,那么IpPolicyPrefix 最好改成应用名...,而不是使用默认值。...结 因为篇幅有限,后一节invoke逐行分析其如何实现的。 以上只是个人看源码的过程,希望能得到各位的指点,共同进步。 另外.net core 细节篇整理进度为40%。

    1.2K10

    ASP.NET Core中的缓存:如何在一个ASP.NET Core应用中使用缓存

    IMemoryCache接口的所有类型以及对应对象的统称。...如果我们在一个ASP.NET Core应用对MemoryCache服务在启动时做了注册,我们就可以在任何地方获取该服务对象设置和获取缓存数据,所以针对缓存的编程是非常简单的。...修改后的应用启动后(确保Redis服务器被正常启动),如果我们利用浏览器来访问它,依然会得到与前面类似的输出。...,我们仅仅是为响应添加了一个Cache-Control报头,并将它的值设置为“public, max-age=3600”(public表示缓存的是可以被所有用户共享的公共数据,而max-age则表示过去时限...并没有携带“utc”查询字符串,所以返回的是一个非UTC时间,接下来我们采用相同的方式生成一个试图返回UTC时间的请求。

    3.3K110

    ASP.NET Core 中的内存管理和垃圾回收 (GC)

    ASP.NET Core 中的内存管理和垃圾回收(GC) 垃圾回收 (GC) 在 .NET Core 中的工作方式 GC 会分配堆段,其中每个段都是一系列连续的内存。...注意:服务器垃圾回收在具有单个核心的计算机上不可用。 有关详细信息,请参阅 IsServerGC。 在典型 Web 服务器环境中,CPU 使用率比内存更重要,因此服务器 GC 更好。...WeakReference类可用于此类型的缓存代码。 WeakReference 对象会在内存压力下进行回收。IMemoryCache 的默认实现使用WeakReference。...WeakReference类 表示弱引用,即在引用对象的同时仍然允许通过垃圾回收来回收该对象。 IMemoryCache 接口 表示未序列化其值的本地内存中缓存。...此方法的不同之处在于,会从 API 返回共用对象。 也就是说: 从方法返回后,对象会立即脱离控制。 无法释放对象。 若要设置对象的释放,请执行以下操作: 将共用数组封装在可释放对象中。

    96130

    Redis 入门与 ASP.NET Core 缓存

    byte[] (二进制)存储,也可以设置值: byte[] str=... ......,请注意查收"); Topic 推送后,订阅方可以收到推送的消息。...message:推送的消息内容。 RedisValue 使用 API 设置值的时候,都会有这个参数。...ASP.NET Core 缓存与分布式缓存 ASP.NET Core 里面有很多定义的标准接口,例如日志、缓存等,这些接口为开发者设置了统一的定义和功能,上层服务不需要变更代码就能切换类库,底层使用哪种库对上层没有影响...在内存中缓存、存储数据 在 ASP.NET Core 的内存缓存之外,我们来讨论一下,编写代码时,自己设置的内存缓存是否合理。 我们都知道,使用内存缓存是为了提高代码性能而用的。

    2.4K20
    领券