我在ASP.NET应用程序中使用 SignalR 。我的应用程序需要的是按下从各种服务器更新的组数据。根据SignalR文档,我有责任这样做。这意味着我需要使用外部服务器/服务来收集来自一个或多个服务器的数据,我可以从一个地方查询该数据。
我首先认为 MemCached 是最佳候选者,因为它很快,我需要放在那里的数据是不稳定的。问题是我需要存储集合,例如:带有用户ID的集合A,因此我可以使用具有2000个用户ID的集合A和具有40,000个ID的集合B.问题是我需要更新此集合并快速删除和插入id。我担心,因为命令将从几个服务器启动,而且我可能需要读取整个集合并在任一Web服务器上更新它,这些数据将不一致。 Web服务器A可能会更新数据,但服务器B将在服务器A完成更新之前读取数据。存在并发冲突。
我正在寻找在我的ASP.NET 4.5应用程序中实现这种策略的最佳方法。我认为这可能是使用内存数据库或确保没有数据完整性的选择。
我想问你问题的最佳解决方案是什么。
这是我的问题的一个例子:
MemCached服务器 - 存储集合(例如集合A,B,C,D),每个集合存储用户ID,可以是数千个ID甚至更多。
Web服务器 - 安装了SignalR的Amazon EC2 Web服务器。可以在负载均衡器后面。这些服务器需要访问memcached服务器并通过Collection名称获取完整的集合项(例如“Collection_23”)。他们需要能够删除项目(用户ID)并添加项目。所有这一切都应该尽可能快。
我希望我自己解释得对。感谢。
答案 0 :(得分:3)
或者,您可以使用Redis,就像Memcached一样,所有内容都是从内存中提供的。 Redis除了简单的键值数据存储之外还有许多其他功能;对于您的特定情况,您可以使用Redis transactions,以确保数据的一致性。
答案 1 :(得分:0)
在另一篇文章的评论中,它显示了一个指向redis提供程序的链接。该链接已断开,现在似乎已集成在主要的SignalR项目中:https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Redis
你有redis nuget: http://www.nuget.org/packages/Microsoft.AspNet.SignalR.Redis
和文档在这里: http://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/scaleout-with-redis