作法:從 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 運算子,將多個 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 項目操作才能觸發含有項目等級回呼的快取通知。新增項目等級回呼時,如果在篩選參數中指定區域操作,則會造成例外狀況。


//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);
}

顯示: