gpt4 book ai didi

c# - 刷新 IIS 网络服务器上所有工作进程的 HttpRuntime.Cache 对象

转载 作者:行者123 更新时间:2023-11-30 16:18:39 25 4
gpt4 key购买 nike

我有一个在 Web 花园模式下设置的 IIS 7 上运行的 asp.net Web 应用程序。我想使用一个步骤清除所有工作进程中的运行时缓存项。我可以设置一个数据库键值,但这意味着在我的每个负载平衡场景 Web 服务器上的每个工作进程上执行的线程将轮询该键值和刷新缓存的更改。这将是一个非常糟糕的机制,因为我每天最多刷新一次缓存项。此外,我无法使用带有 Service Broker 通知的 SqlCacheDependency 来实现推送通知,因为我有一个 MySql 数据库。有什么想法吗?有什么肮脏的解决方法吗?一种可能的解决方法是公开一个 aspx 页面,然后使用托管站点的 ip 和端口而不是域名多次访问该页面 - 例如:http://ip.ip.ip.ip:82/CacheClear.aspx ,以便可以将对该页面的请求发送到该网络服务器内的所有工作进程,并在 Page_Load 上清除缓存项。但这是一个非常肮脏的 hack,并且在所有请求都发送到同一个工作进程的情况下可能不起作用。

最佳答案

您需要设置进程间通信。对于缓存,有两种常用的方法:

  • 设置共享缓存(memcached 等)
  • 设置消息队列(例如 ms-mqueue 或 rabbitMq)并使用它将状态传播到本地缓存。

共享缓存是最终的解决方案,因为它意味着整个缓存是分布式的,但它也是最复杂的:需要对其进行设置,以便缓存负载在节点之间正确分配,并确保它不会成为一个瓶颈。

第二个选项需要您编写更多代码,但如果您不想共享缓存内容(如您的情况),则更容易。最简单的方法是设置一个监听器线程或任务来处理缓存清除或单个条目失效消息。如果没有消息,此线程将处于休眠状态,因此对性能的影响很小。您还可以通过将消息作为通常的 iis 请求管道的一部分来处理来放弃监听器线程。 IE。设置一个过滤器/模块来检查队列中的消息并在处理请求之前处理它们;但在性能方面,第一个选项(稍微)更好。

关于c# - 刷新 IIS 网络服务器上所有工作进程的 HttpRuntime.Cache 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15960133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com