共用方式為


如何:從 Azure 受控快取服務快取接收通知

重要

Microsoft 建議使用 Azure Redis 快取的所有新開發。 如需選擇 Azure 快取供應專案的目前檔和指引,請參閱 哪一個 Azure 快取供應專案適合我?

此主題說明如何新增快取通知回呼,讓應用程式接收快取通知。

新增快取通知回呼有兩個必要步驟。 首先,建立當一或多個快取作業觸發快取通知時要叫用的方法。 您使用快取通知叫用的方法必須接受與 DataCacheNotificationCallback 委派相同的參數。 其次,使用 DataCache 物件的三個可用方法之一來新增回呼:

使用 filter 參數來定義要觸發快取通知的快取作業類型。 針對 clientDelegate 參數使用您在第一個步驟建立之方法的名稱。

為一或多個快取作業新增回呼

  1. 建立要由快取通知觸發的方法。 確認該方法可與 DataCacheNotificationCallback 委派接受相同的參數。

  2. 新增回呼。 使用 DataCache 物件的三個可用方法之一來定義通知範圍: AddCacheLevelCallbackAddRegionLevelCallbackAddItemLevelCallback

    1. 使用 參數中的 filterDataCacheOperations列舉來指定您想要觸發通知的快取作業類型。 利用二元 OR 運算子區隔列舉以選取多個列舉,來執行位元 OR。 若要這樣做,請在 C# 使用 | 字元,或在 Visual Basic 使用 Or 運算子。

    2. clientDelegate 參數中使用這些通知發生時要叫用之方法的名稱。

    3. 將 add callback 方法設定為等於 DataCacheNotificationDescriptor 物件,您可以在程式中的其他位置使用,以移除快取通知回呼。

範例

註冊快取通知的第一個步驟,就是建立要由通知觸發的方法。 通知所呼叫的方法必須與 DataCacheNotificationCallback 委派接受相同的參數。 此範例顯示快取通知可以叫用的方法之一。

'method invoked by notification "ndCacheLvlAllOps" 
Public Sub myCacheLvlDelegate(ByVal myCacheName As String, _
    ByVal myRegion As String, _
    ByVal myKey As String, _
    ByVal itemVersion As DataCacheItemVersion, _
    ByVal OperationId As DataCacheOperations, _
    ByVal nd As DataCacheNotificationDescriptor)

    '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()
End Sub
//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 方法。

注意

不建議在實際執行運用時這樣做。 此範例僅供示範之用。

'specify all possible item and region operations
Dim allCacheOperations As DataCacheOperations
allCacheOperations = DataCacheOperations.AddItem Or _
    DataCacheOperations.ReplaceItem Or _
    DataCacheOperations.RemoveItem Or _
    DataCacheOperations.CreateRegion Or _
    DataCacheOperations.ClearRegion Or _
    DataCacheOperations.RemoveRegion

'add cache-level notification callback 
'all cache operations from a notifications-enabled cache
Dim ndCacheLvlAllOps as DataCacheNotificationDescriptor = _
    myTestCache.AddCacheLevelCallback(allCacheOperations, AddressOf myCacheLvlDelegate)
//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
Dim ndRegionCreateRegOp As DataCacheNotificationDescriptor
ndRegionCreateRegOp = _
    myTestCache.AddRegionLevelCallback("TestRegion", _
    DataCacheOperations.CreateRegion, AddressOf myRegionLvlAddDelegate)
//add region-level notification callback for region "TestRegion"
//trigger notification with CreateRegion operation
DataCacheNotificationDescriptor ndRegionCreateRegOp
    = myTestCache.AddRegionLevelCallback("TestRegion",
    DataCacheOperations.CreateRegion, myRegionLvlAddDelegate);

下一個範例顯示如何針對範圍為項目等級通知的快取作業新增回呼 (只有在快取中使用 TestKey 索引鍵新增或取代物件時才會觸發此回呼)。

注意

只有 AddItemReplaceItemRemoveItem 項目操作才能觸發含有項目等級回呼的快取通知。 新增項目等級回呼時,如果在篩選參數中指定區域操作,則會造成例外狀況。

'add item-level notification callback for item "TestKey"
'trigger notification with AddItem and ReplaceItem operations
Dim ndItemUpdateOps As DataCacheNotificationDescriptor
ndItemUpdateOps = _
    myTestCache.AddItemLevelCallback("TestKey", _
    (DataCacheOperations.AddItem Or DataCacheOperations.ReplaceItem), _
    AddressOf myItemLvlUpdateDelegate)
//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
Dim myTestCache As DataCache
Dim ndCacheLvlAllOps As DataCacheNotificationDescriptor
Dim ndRegionLvlAllOps As DataCacheNotificationDescriptor
Dim ndItemLvlAllOps As DataCacheNotificationDescriptor
//define variables for class
DataCache myTestCache;
DataCacheNotificationDescriptor ndCacheLvlAllOps;
DataCacheNotificationDescriptor ndRegionLvlAllOps;
DataCacheNotificationDescriptor ndItemLvlAllOps;

這個範例顯示使用 RemoveCallback 方法從上一個範例中移除對應至這三個 DataCacheNotificationDescriptor 物件之回呼的方法。

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

另請參閱

概念

Azure 受管理快取服務的通知