AppFabric 同步本地缓存

标签 appfabric appfabric-cache

我们有一个非常简单的 AppFabric 设置,其中有两个客户端——我们称它们为服务器 A 和服务器 B。服务器 A 也是主要缓存主机,并且服务器 A 和 B 都启用了本地缓存。我们希望能够对服务器 B 中的项目进行更新,并让该更改在 30 秒内传播到服务器 A 的本地缓存(例如)。

据我所知,似乎有两种不同的方法可以将更改传播到客户端:

  1. 在客户端缓存上设置超时以每 X 秒逐出项目。在下一次请求该项目时,它将从主机缓存中获取该项目,因为本地缓存没有该项目
  2. 启用通知并有效订阅以从缓存主机获取更新

如果我的要求是在 30 秒内获取所有客户端的更新,那么在使用上面的选项 #1 时,将本地缓存的超时设置为小于 30 秒似乎是唯一的选择。由于缓存的大小,驱逐所有缓存的效率很低(其中 99.99% 的缓存在过去 30 秒内可能没有更改)。

我认为我们需要实现的是上面的选项 #2,但我不确定我是否理解它是如何工作的。我已经阅读了所有的 msdn 文档 ( http://msdn.microsoft.com/en-us/library/ee808091.aspx ) 并查看了一些示例,但我仍然不清楚是否真的有必要编写自定义代码,或者是否仅在您想进行额外处理时才这样做。

所以我的问题是:如果想要通过通知将更新传播到所有本地缓存​​,是否有必要向您现有的应用程序添加代码,或者如果通知是回调功能只是添加额外处理或代码的奖励方式推下去?我是否可以只启用通知并在客户端设置适当的轮询间隔,一切都会正常进行?

默认行为(启用通知时)似乎应该是在每个轮询间隔自动拉取新项目。

最佳答案

我进行了一些测试,很高兴地说您不需要编写任何代码来确保所有客户端保持同步。如果将以下设置为集群配置的子元素:

在客户端配置中,您需要在元素上设置 sync="NotificationBased"。

客户端配置中的元素将告诉客户端应该多久检查一次服务器上的新通知。在这种情况下,客户端将每 15 秒检查一次通知并拉下任何已更改的项目。

我猜你可以添加到你的应用程序的回调逻辑只是为了以防万一你想添加自己的特殊逻辑(比如每次缓存中的项目发生变化时向总统发送电子邮件)。

关于AppFabric 同步本地缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17838655/

相关文章:

api - 我是否需要带有 Azure API 服务的 Azure 流量管理器?

sql - 延迟写入 SQL Server

azure - 与 Azure 中的 LDAP 集成

c# - App Fabric Cache一天怎么清一次?

c# - 反序列化 System.Collections.ArrayList 类型的对象 - AppFabric 缓存错误

asp.net-mvc-3 - 最佳实践 : Using Session in Windows Azure with multiple instances

c# - 使用 Azure SQL 作为配置存储的 AppFabric 缓存

c# - AppFabric 1.0错误服务器集合不能为空

c# - AppFabric 缓存客户端拒绝

redis - AppFabric 缓存到 Redis - 等效于 GetAndLock 方法?