缓存通知(Windows Server AppFabric 缓存)

Windows Server AppFabric 提供缓存通知,允许您的应用程序在缓存群集上发生各种缓存操作时接收异步通知。 缓存通知还提供本地缓存对象的自动失效。 有关详细信息,请参阅过期和逐出(Windows Server AppFabric 缓存)

要接收异步缓存通知,请将缓存通知回调添加到您的应用程序。 添加回调时,定义触发缓存通知的缓存操作的类型以及发生指定操作时应调用应用程序中的哪个方法。 本主题详细介绍了该过程。

备注

要使用缓存通知,您将必须使用基于 Windows PowerShell 的缓存管理工具中的 New-CacheSet-CacheConfig Windows PowerShell 命令,对命名缓存启用缓存通知。

触发缓存通知

如下图所示,对区域和缓存对象(称为缓存中的项)的更改可触发缓存通知。

触发缓存通知的更改

这些缓存操作由 DataCacheOperations 类的成员定义。

区域操作

您的应用程序可以在区域上发生以下缓存操作时接收缓存通知:

项目操作

您的应用程序可以在缓存对象(称为缓存中的项目)上发生以下缓存操作时接收缓存通知。

备注

这些项目操作本身不依赖于它们是否出现在区域中。 您可以选择将您回调的通知范围限制在特定区域。 本文的“通知范围”部分将进行讨论。

通知范围

根据应用程序的活动和需求,您可能不希望关注整个缓存中每个对象和区域中的事件。 AppFabric 允许您将通知范围从缓存级别缩小到区域级别和项目级别。 如下图所示,您在添加回调时所选的通知范围,对您将收到哪些缓存通知有着显著影响。

缓存通知作用域

在缓存级别,您的应用程序可能收到缓存中所有对象和区域中所有缓存操作的通知。 在区域级别,您的应用程序将只能收到有关某个单一区域和其中对象的缓存操作的通知。 在项目级别,您的应用程序将只能收到有关某个单一对象的缓存操作的通知。

要指定所需通知范围,请选择三种方法之一来添加缓存通知回调:

  • AddCacheLevelCallback:当您希望收到有关所有区域和项目上发生的基于区域和项目的缓存操作的通知时。

  • AddRegionLevelCallback:当您希望收到有关某个特定区域上发生的基于区域和项目的缓存操作的通知时。

  • AddItemLevelCallback: 当您希望收到某个特定项目上发生的基于项目的缓存操作的通知时。

通知顺序

缓存客户端接收通知的顺序应保证在一个区域上下文中。 例如,假设您已经创建了一个名为 RegionA 的区域。 由于放入缓存区域的所有数据都限制到同一区域,因此有关 RegionA(区域级别通知范围)的所有缓存操作均会按照与彼此相关的适当顺序到达缓存客户端。 不保证其他缓存主机上基于区域和项目的缓存操作按照与 RegionA 中发生的操作相关的适当顺序到达。

在性能方面,涉及多个地区或存储在不同地区的多个对象的通知,其顺序无法保证。

将项目事件的版本信息以 DataCacheItemVersion 对象的形式,传递到缓存通知使用 version 参数调用的方法。 此 DataCacheItemVersion 对象与触发项目事件的对象的版本相对应。 通过使用 CompareTo 方法,您可以比较版本以确定哪个缓存操作最先到达。

备注

仅当比较相同密钥指定的相同项目的版本时,版本比较才有意义。 不可能通过比较不同密钥的版本来推断顺序;CompareTo 方法可返回一个结果,但是该结果只对相同密钥的版本有效。

轮询时间间隔

使用缓存通知时,您的应用程序按照定期时间间隔检查缓存群集以查看是否有任何新通知。 此时间间隔(称为轮询时间间隔)默认为每隔 300 秒。

在应用程序配置设置中,轮询时间间隔指定为以秒为单位。 要指定特定时间间隔,您可以使用应用程序配置文件中 clientNotifications 元素的 pollInterval 属性。 您还可以使用 DataCacheFactoryConfiguration 对象的 NotificationProperties 属性以编程方式指定特定轮询时间间隔。

通知丢失时

缓存主机只能在内存中保留一定数量的缓存操作。 某些缓存客户端在缓存主机队列中被截断之前可能收不到通知(取决于系统负载)。 当数据由于缓存服务器故障而丢失时,缓存客户端可能也会丢失通知,尽管其余的群集仍然保持运行。 在这些情况下,您的缓存客户端可以通过使用故障通知来发现已经丢失了一些缓存通知。 您的应用程序可以通过使用 AddFailureNotificationCallback 方法添加回调以接收故障通知。 有关详细信息,请参阅添加失败通知回拨(Windows Server AppFabric 缓存)

缓存群集丢失时

在通知丢失和缓存群集丢失之间存在重要区别。 如果您的应用程序丢失一个或多个通知,则可以通过故障通知的方式察觉到丢失了通知。 如果整个缓存群集停止、重新启动或丢失,则不会触发任何通知。 但是,如果无法与群集连接,您的缓存客户端将在下次尝试使用缓存时抛出异常。

备注

缓存通知只报告对群集中的区域和缓存项目所做的与数据相关的更改;而不报告群集本身的事件。

启用缓存通知

在群集配置设置中的缓存级别可配置缓存通知功能。 作为缓存的属性,您可以使用带有 NotificationsEnabled 开关的 New-Cache 命令在第一次创建缓存时对其进行启动。 默认情况下,当您创建新缓存时,缓存通知功能是禁用的。 有关编辑缓存配置设置的详细信息,请参阅使用 Windows PowerShell 编辑缓存配置设置(Windows Server AppFabric 缓存)

不需要应用程序配置设置为接收缓存通知添加回调。 您可以使用应用程序配置设置来指定特定的轮询时间间隔。 默认情况下,轮询时间间隔为 300 秒。 如果需要其他持续时间,则使用基于 XML 的应用程序配置文件中的 clientNotification 元素,或使用 DataCacheFactoryConfiguration 对象的 NotificationsProperties 属性以编程方式指定您所需的时间间隔。

使用缓存通知

在启用缓存通知后,存在与使用缓存通知相关的三个任务: 添加缓存通知回调、添加故障通知回调和删除缓存通知回调。 使用缓存通知(Windows Server AppFabric 缓存)中介绍了每个任务的过程。

另请参阅

概念

Windows Server AppFabric 缓存物理体系结构示意图
Windows Server AppFabric 缓存逻辑体系结构示意图
开发缓存客户端(Windows Server AppFabric 缓存)

  2011-12-05