我们的 Web 应用程序使用内存缓存(应用程序数据缓存)来提高吞吐量,这样就不必为每个请求从数据库 (SQL Server) 加载频繁查询的数据。它有可能部署在网络场中,因此我们必须解决必须同步所有节点缓存的经典问题。所以我们需要的是分布式缓存。
现成的解决方案有 NCache 和 REDIS(可能还有更多)。但是,由于我们已经使用 SignalR Backplane 将数据集的更改传达给 Windows 服务(和浏览器客户端),我想知道它是否可以用于实现分布式缓存。
这样做时,我们(或多或少)会重用现有的数据集已更改消息,但在 Web 应用程序本身中订阅它们以使其缓存失效。好处是我们不必引入新的库/技术。
我想我最大的问题是:这有意义吗?而且,SignalR 背板是否足够可靠,足以确保不会丢失事件,从而导致缓存过时?或者这是架构上的误用?
最佳答案
Signalr 用于实时解决方案,而不是静态解决方案。
在您的解决方案中,您将选择一项服务上的数据,然后通过背板将其发送到另一项服务。然后呢?也许你会把它保存在内存中。如果其中一项服务重新启动会发生什么情况?数据将会消失。使用redis你永远不会遇到这个问题。此外,您将消耗此数据的本地内存。
您将如何管理过期?另外,您将努力使用信号器来实现此缓存系统。
我不建议您为此使用信号器背板。坚持使用 Redis 或类似技术。
关于signalr - SignalR Backplane 是否可以/应该用于构建分布式缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36208963/