Azure 角色中缓存中的通知
重要
Microsoft 建议所有新开发使用 Azure Redis 缓存。 有关选择 Azure 缓存产品/服务的当前文档和指南,请参阅 哪个 Azure 缓存产品/服务适合我?
Azure 提供缓存通知,允许你的应用程序在缓存群集上发生各种缓存操作时接收异步通知。 缓存通知还提供本地缓存的对象的自动失效。
若要接收异步缓存通知,请将缓存通知回调添加到你的应用程序。 添加回调时,请定义触发缓存通知的缓存操作的类型以及发生指定操作时应调用应用程序中的哪个方法。 命名缓存需要选择加入并启用缓存通知。
触发缓存通知
这些缓存操作由 DataCacheOperations 类的成员定义。
区域操作
你的应用程序可以在区域上发生以下缓存操作时接收缓存通知:
CreateRegion:在缓存中创建区域时。
ClearRegion:缓存中清除区域时。
RemoveRegion:从缓存中删除区域时。
项目操作
你的应用程序可以在缓存对象(称为缓存中的项目)上发生以下缓存操作时接收缓存通知。
AddItem:将项添加到缓存中时。
ReplaceItem:在缓存中替换项时。
RemoveItem:从缓存中删除项时。
注意
这些项目操作本身不依赖于它们是否出现在区域中。 你可以选择将你回调的通知范围限制在特定区域。 本文档的“通知范围”部分将对此进行讨论。
通知范围
根据应用程序的活动和需求,你可能不希望关注整个缓存中每个对象和区域中的事件。 你可以将通知范围从缓存级别缩小到区域级别和项目级别。 你在添加回调时所选的通知范围,对你将收到哪些缓存通知有着显著影响。
在缓存级别,你的应用程序可能收到有关该缓存所有对象和区域中的所有缓存操作的通知。 在区域级别,你的应用程序将只能收到有关单个区域和其中对象的缓存操作的通知。 在项目级别,你的应用程序将只能收到有关单个对象的缓存操作的通知。
若要指定所需的通知范围,请选择这三种方法之一来添加缓存通知回调:
AddCacheLevelCallback:当你想要收到针对所有区域和项发生的基于区域和项的缓存操作的通知时。
AddRegionLevelCallback:当想要在一个特定区域中收到基于区域和项的缓存操作的通知时。
AddItemLevelCallback:当你想要收到针对一个特定项发生的基于项的缓存操作的通知时。
通知顺序
缓存客户端接收通知的顺序应保证在一个区域的上下文中。 例如,假设你已经创建了一个名为 RegionA
的区域。 由于放入缓存区域的所有数据都限制到同一区域,因此有关 RegionA
(区域级别通知范围)的所有缓存操作均会按照与彼此相关的适当顺序到达缓存客户端。 不保证其他缓存主机上基于区域和项目的缓存操作按照与 RegionA
中发生的操作相关的适当顺序到达。
在性能方面,涉及多个地区或存储在不同地区的多个对象的通知,其顺序无法保证。
项事件的版本信息(以 DataCacheItemVersion 对象的形式)传递给缓存通知使用 version
参数调用的方法。 此 DataCacheItemVersion 对象对应于触发项事件的对象的版本。 通过使用 CompareTo 方法,可以比较版本以确定哪些缓存操作首先出现。
注意
仅当比较相同密钥指定的相同项目的版本时,版本比较才有意义。 无法通过比较不同键的版本来推断顺序: CompareTo 方法可能返回结果,但结果仅对相同密钥的版本有效。
轮询间隔
使用缓存通知时,你的应用程序将定期向缓存群集查询以了解是否有任何新通知。 此间隔称为轮询间隔,默认情况下为每 300 秒。 频繁写入的应用程序可能需要将此间隔设置为一个较小的值,但对于不经常更改的缓存,设置较大的间隔可能会更好。 默认值 300 秒适用于大多数一般缓存。
在应用程序配置设置中,轮询间隔是以秒为单位指定的。 若要指定特定间隔,你可以使用应用程序配置文件中 pollInterval
元素的 clientNotifications
属性。 还可以使用 NotificationProperties
DataCacheFactoryConfiguration 对象的属性以编程方式指定特定的轮询间隔。
通知丢失时
缓存主机只能在内存中保留一定数量的缓存操作。 在缓存主机队列中截断通知之前,某些缓存客户端可能未收到通知。 当数据由于缓存服务器故障而丢失时,缓存客户端可能也会丢失通知,尽管其余的群集仍然保持运行。 在这些情况下,你的缓存客户端可以通过使用故障通知来发现已经丢失了一些缓存通知。 应用程序可以使用 AddFailureNotificationCallback 方法添加回调来接收失败通知。 有关详细信息,请参阅 如何:添加失败通知回调
缓存群集丢失时
在通知丢失和缓存群集丢失之间存在重要区别。 如果你的应用程序丢失一个或多个通知,则可以通过故障通知的方式察觉到丢失了通知。 如果整个缓存群集停止、重新启动或丢失,则不会触发任何通知。 但是,如果无法与群集连接,你的缓存客户端将在下次尝试使用缓存时引发异常。 缓存群集事件(如缓存创建或删除)不由通知报告。 如果缓存在注册通知后从服务器中删除,则用户仅仅会停止接收通知。 无法在缓存不存在和未对缓存执行操作之间进行区分。
注意
缓存通知只报告对群集中的区域和缓存项目所做的与数据相关的更改;而不报告群集本身的事件。
启用缓存通知
在群集配置设置中,可在缓存级别配置缓存通知功能。 作为缓存的属性,该功能可以在你首次创建缓存时启用。 默认情况下,当你创建新缓存时,缓存通知功能是禁用的。
不需要任何应用程序配置设置添加用于接收缓存通知的回调。 你可以使用应用程序配置设置来指定特定的轮询间隔。 默认情况下,轮询间隔为 300 秒。 如果需要其他持续时间,请使用clientNotification
基于 XML 的应用程序配置文件中的元素,或使用 DataCacheFactoryConfiguration 对象的属性以编程方式NotificationsProperties
指定所需的间隔。
使用缓存通知
启用缓存通知后,有三个与使用缓存通知相关的任务:添加缓存通知回调、添加失败通知回调和删除缓存通知回调。 每个任务的过程将在本文档的其余部分中介绍。