Azure 托管缓存服务的通知
重要
Microsoft 建议所有新开发使用 Azure Redis 缓存。 有关选择 Azure 缓存产品/服务的当前文档和指南,请参阅 哪种 Azure 缓存产品/服务适合我?
Microsoft 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 对象的属性以编程方式指定特定的轮询间隔。
通知丢失时
Microsoft Azure缓存只能在内存中保存一定数量的缓存操作。 在通知队列中截断通知之前,某些缓存客户端可能未收到通知。 当数据由于缓存故障而丢失时,缓存客户端可能也会丢失通知。 在这些情况下,你的缓存客户端可以通过使用故障通知来发现已经丢失了一些缓存通知。 应用程序可以使用 AddFailureNotificationCallback 方法添加回调以接收失败通知。 有关详细信息,请参阅 如何:添加失败通知回调
缓存丢失时
在通知丢失和缓存丢失之间存在重要区别。 如果你的应用程序丢失一个或多个通知,则可以通过故障通知的方式察觉到丢失了通知。 如果删除整个缓存,则在你下次尝试使用缓存时,缓存客户端将因无法连接到缓存终结点而引发异常。 缓存事件(如命名缓存的创建或删除)不由通知报告。 如果命名缓存在注册通知后被删除,则你仅仅会停止接收通知。 无法在命名缓存不存在和未对命名缓存执行操作之间进行区分。
注意
缓存通知只报告对缓存中的区域和缓存项目所做的与数据相关的更改,而不报告缓存本身的事件。
启用缓存通知
通知在管理门户中缓存“配置”选项卡上的命名缓存级别进行配置。 通知的默认设置为“已禁用”。
不需要任何应用程序配置设置添加用于接收缓存通知的回调。 你可以使用应用程序配置设置来指定特定的轮询间隔。 默认情况下,轮询间隔为 300 秒。 如果需要不同的持续时间,请使用clientNotification
基于 XML 的应用程序配置文件中的元素,或使用 DataCacheFactoryConfiguration 对象的属性以编程方式NotificationsProperties
指定所需的间隔。
使用缓存通知
启用缓存通知后,有三个与使用缓存通知相关的任务:添加缓存通知回调、添加失败通知回调和删除缓存通知回调。 每个任务的过程将在本文档的其余部分中介绍。