我们有一个非常简单的 AppFabric 设置,其中有两个客户端——我们称它们为服务器 A 和服务器 B。服务器 A 也是主要缓存主机,并且服务器 A 和 B 都启用了本地缓存。我们希望能够对服务器 B 中的项目进行更新,并让该更改在 30 秒内传播到服务器 A 的本地缓存(例如)。
据我所知,似乎有两种不同的方法可以将更改传播到客户端:
- 在客户端缓存上设置超时以每 X 秒逐出项目。在下一次请求该项目时,它将从主机缓存中获取该项目,因为本地缓存没有该项目
- 启用通知并有效订阅以从缓存主机获取更新
如果我的要求是在 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/