操作方法:从缓存接收通知

操作方法:从 Azure 角色中缓存接收通知

更新时间: 2015年8月

Important重要提示
Microsoft 建议使用 Azure Redis 缓存进行所有新的开发。有关选择 Azure 缓存产品的最新文档和指导,请参阅哪种 Azure 缓存产品适合我?

本主题介绍了如何添加将启用应用程序以接收缓存通知的缓存通知回调。

添加缓存通知回调需要完成以下两个步骤:首先,创建当缓存通知由一个或多个缓存操作触发时,应调用的方法。你使用缓存通知调用的方法必须接受与 DataCacheNotificationCallback 委派相同的参数。第二,通过使用 DataCache 对象的三种可用方法之一添加回调:

使用 filter 参数定义你要触发缓存通知的缓存操作的类型。为 clientDelegate 参数使用你在步骤一中创建的方法的名称。

  1. 创建你要通过缓存通知触发的方法。确保此方法接受与 DataCacheNotificationCallback 委派相同的参数。

  2. 添加回调。使用 DataCache 对象的三种可用方法之一定义通知作用域: AddCacheLevelCallbackAddRegionLevelCallbackAddItemLevelCallback

    1. 使用 filter 参数中的 DataCacheOperations 枚举指定你要触发通知的缓存操作类型。通过使用二进制 OR 运算符来分隔枚举,从而选择多个枚举以执行逐位 OR 运算。为此,请使用 C# 中的 | 字符和 Visual Basic 中的 Or 运算符。

    2. 当这些通知出现在 clientDelegate 参数中时,使用你要调用的方法的名称。

    3. 设置与可以在程序其他位置使用的 DataCacheNotificationDescriptor 对象相同的添加回调方法,以删除缓存通知回调。

为缓存通知注册时的第一步是创建希望通知调用的方法。通知调用的方法必须接受与 DataCacheNotificationCallback 委派相同的参数。此示例显示了其中一个可以由缓存通知调用的方法示例。


//method invoked by notification "ndCacheLvlAllOps" 
public void myCacheLvlDelegate(string myCacheName,
    string myRegion, 
    string myKey, 
    DataCacheItemVersion itemVersion,
    DataCacheOperations OperationId, 
    DataCacheNotificationDescriptor nd)
{
    //display some of the delegate parameters
    Console.WriteLine("A cache-level notification was triggered!");
    Console.WriteLine("    Cache: " + myCacheName);
    Console.WriteLine("    Region: " + myRegion);
    Console.WriteLine("    Key: " + myKey);
    Console.WriteLine("    Operation: " + OperationId.ToString());
    Console.WriteLine();
}

第二步是为一个或多个缓存操作添加回调。在此示例中,将创建一个通知以调用上述示例的方法。此通知已为缓存级别通知作用域的所有可能缓存操作进行了配置,这样做只是出于演示目的。

要定义多个缓存操作,你可以使用二进制 OR 运算符为可用于 filter 参数的 DataCacheOperations 变量分配多个 DataCacheOperations 枚举。要为缓存级别通知作用域内的缓存操作添加回调,请使用 AddCacheLevelCallback 方法。

note备注
我们不建议你在生产应用程序中进行此操作。此示例仅供参考。


//specify all possible item and region operations
DataCacheOperations allCacheOperations = DataCacheOperations.AddItem |
    DataCacheOperations.ReplaceItem |
    DataCacheOperations.RemoveItem |
    DataCacheOperations.CreateRegion |
    DataCacheOperations.ClearRegion |
    DataCacheOperations.RemoveRegion;

//add cache-level notification callback 
//all cache operations from a notifications-enabled cache
DataCacheNotificationDescriptor ndCacheLvlAllOps
    = myTestCache.AddCacheLevelCallback(allCacheOperations, myCacheLvlDelegate);

下一示例显示为区域级别通知作用域的缓存操作添加回调时的情况,仅在名为 TestRegion 的区域添加到缓存时才触发。


//add region-level notification callback for region "TestRegion"
//trigger notification with CreateRegion operation
DataCacheNotificationDescriptor ndRegionCreateRegOp
    = myTestCache.AddRegionLevelCallback("TestRegion",
    DataCacheOperations.CreateRegion, myRegionLvlAddDelegate);

下一示例显示为项目级别通知作用域的缓存操作添加回调的情况,仅当使用密匙 TestKey 在缓存中添加或替换对象时才触发。

note备注
只有项目操作 AddItemReplaceItemRemoveItem 才能触发带有项目级别回调的缓存通知。添加项目级别回调时,如果指定 filter 参数中的区域操作,将导致异常。


//add item-level notification callback for item "TestKey"
//trigger notification with AddItem and ReplaceItem operations
DataCacheNotificationDescriptor ndItemUpdateOps
    = myTestCache.AddItemLevelCallback("TestKey",
        (DataCacheOperations.AddItem | DataCacheOperations.ReplaceItem),
        myItemLvlUpdateDelegate);

  1. 使用 RemoveCallback 方法删除缓存通知回调。对 nd 参数使用适当的 DataCacheNotificationDescriptor 对象。使用注册通知时收到的 NotificationDescriptor 可停止接收通知。

在本示例中,缓存客户端和三个 DataCacheNotificationDescriptor 对象是在类级别声明的,因此添加和删除回调的方法可以对其进行访问


//define variables for class
DataCache myTestCache;
DataCacheNotificationDescriptor ndCacheLvlAllOps;
DataCacheNotificationDescriptor ndRegionLvlAllOps;
DataCacheNotificationDescriptor ndItemLvlAllOps;

本示例演示了使用 RemoveCallback 方法删除与上一示例中的所有三个 DataCacheNotificationDescriptor 对象对应的回调的方法。


//remove cache notification callbacks
public void RemoveNotificationCallbacks()
{
    myTestCache.RemoveCallback(ndCacheLvlAllOps);
    myTestCache.RemoveCallback(ndRegionLvlAllOps);
    myTestCache.RemoveCallback(ndItemLvlAllOps);
}

显示:
© 2016 Microsoft