0

我有一个在具有多台机器的 ARR 集群 (IIS) 中运行的 .NET Web 应用程序。

每台机器都必须在内存中为用户访问权限保留一个缓存。也就是说,当应用程序必须确定用户是否有权访问资源时,它会查询内存缓存以避免数据库访问(每个用户请求都有很多查询)。

问题是,在某些情况下,这个缓存必须失效。但是,由于有多台机器,当一个决定缓存必须失效时,它必须传播到其他机器。

解决此问题的最佳做法是什么?我们有一个在 IIS ARR 集群上运行的 ASP.NET MVC 3 应用程序。

4

2 回答 2

1

消息队列是正常的解决方案。

您可以拥有一个由所有节点订阅的队列,当您需要使缓存无效时,您向队列发送消息 - 其他节点看到此消息并使他们的队列无效。

MSMQ是微软的消息队列,但是有很多第三方的。您可能想看看nServiceBus作为替代方案。

于 2013-01-30T20:24:00.073 回答
0

使所有与权限相关的缓存失效,或仅使缓存的相关部分失效(例如特定用户、特定角色等?)

无论如何,我正在考虑一些 pub/sub 模式,例如http://redis.io/topics/pubsub - 应用程序订阅(sub)的服务器,应用程序可以通过发布请求缓存失效对所有订阅者的请求 (pub)

于 2013-01-30T20:27:48.270 回答