asp.net - 在负载平衡环境中覆盖 HttpContext.Current.Cache。

标签 asp.net caching redis

我们有一个环境,供应商将应用程序部署到其上的多个前端。它大量使用 ASP .Net 存储( session 、应用程序和缓存)。问题是这个环境的负载很快就会让 IIS 无法承受它试图保存在内存中的数据量。

我们尝试采用的解决方案是覆盖存储机制并实现我们自己的。 (具体是一个Redis服务器来管理存储)

我们已经实现了他们的缓存接口(interface),并在 web.config 中设置了 Microsoft.Web.Redis.RedisSessionStateProvider 来管理 session 。那部分一切正常。问题是供应商应用程序内部的缓存并不总是使用他们提供的接口(interface)。反编译 dll 并检查转储文件表明它们有几个直接调用的实例(例如): HttpContext.Current.Cache.Insert(...)HttpContext.Current.Application[...] = ...

有什么方法可以覆盖 HTTPContext* 调用,以便它们使用 Redis 来缓存而不是 Asp .Net 应用程序存储?

最佳答案

当它是使用 HttpContext.Current 的“第 3”方时,您可能没有机会更改该行为。

这个其他应用程序是否在您的上下文中运行(您是否控制应用程序域)?或者它是一个独立的应用程序? 我曾经尝试更改 HttpContext.Current.Cache 以进行单元测试,但最终模拟了整个 HttpContext,因为它在 Microsoft 堆栈中的某个地方非常内部。

所有这一切都很难做到,不推荐,并且可能导致各种其他错误。 简而言之,不要使用 HttpContext.Current.Cache。使用可以注入(inject)的东西。

一般来说,库不应该使用那个静态上下文。
对这类事情进行抽象+ DI要灵活得多... 对于缓存,您可以使用 CacheManager例如。

关于asp.net - 在负载平衡环境中覆盖 HttpContext.Current.Cache。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42841068/

相关文章:

java - 使用 Wildfly 11 复制 infinispan 缓存

redis - SETNX 真的是原子的吗?

.net - 静态/共享功能中的LoadControl

c# - 如果JavaScript验证失败,则防止回发页面

asp.net - 经典 ASP 和 ASP.NET 集成

Mendix 中的缓存和 AOP : is there a uniform or standardized approach for server-side caching within a Mendix application?

javascript - Turbolinks、Rails、后退按钮、其他来源的页脚

redis - Redisson中各种锁的实现提供了哪些保证?

PHP 接收并响应数以千计的请求——在幕后进行计算

ASP.NET MVC 身份验证 cookie