2014-11-23 24 views
1

我在過移動C#ASP.Net Web應用程序天青的規劃過程Azure的緩存/數據高速緩存風格的地區(目前主持一個專用的服務器上),並期待在緩存選項。目前,因爲我們一次只運行一個應用程序實例,所以我們有一個「進程中」內存緩存來緩解SQL DB的一些相同的請求。在Redis的

此刻的過程是清除緩存的某些部分時,經理/服務進行更改數據庫,例如那些部分我們有一個用戶表,我們將有返回單個用戶記錄/對象的「用戶。{0}」和返回與該外鍵相關的所有用戶的「Users.ForeignKey。{0}」。如果我們更新單個用戶記錄,那麼我們刪除「User.1」鍵(如果userid = 1)並且爲了簡化所有列表集合,因爲它們可能已經改變。我們通過按模式刪除按鍵來實現這一點,這意味着只有受影響的按鍵被刪除,其他按鍵纔會被刪除。

我們一直在計劃向Azure遷移一段時間,當我們開始考慮Azure Redis緩存服務不可用時(至少受支持),因此我們查看了Azure緩存服務, AppFabric中。使用這個,我們決定使用DataCache區域來分離不同的對象類型,然後刷新受影響的區域,與我們當前的方法不完全一樣,但是確定。現在,由於Redis已經來到現場,我們一直在考慮這一點,如果可能的話,寧願使用它。然而,爲了實現同樣的目標,我們必須爲每個「區域」/部分分別使用Redis緩存,這從我的理解來看,這意味着我們需要爲來自Azure的Redis緩存服務的許多小型實例付費將花費相當多的成本,因爲我們需要10個以上的獨立可沖洗部分緩存。

任何人知道如何實現類似於Azure的數據高速緩存區與Redis的東西,或者你可以建議一些有目共睹的是我可能丟失。

對不起,這麼長的問題/解釋,但我發現很難解釋我想實現沒有背景/上下文。

感謝, 加雷思

更新:

我已經發現了一些的bash命令,可以做到通過模式刪除鍵,包括使用「KEYS」命令here和LUA的工作腳本EVAL命令here。我打算使用StackExchange.Redis客戶端進行交互,沒有人知道如何使用StackExchange.Redis的這些類型的命令或替代方法(按模式刪除鍵)?

感謝您的閱讀,加雷思

回答

8

您可以使用此方法,它利用異步/等待功能和redis pipelining使用stack exchange redis client

private static Task DeleteKeysByPatternAsync(string pattern) 
{ 
    IDatabase cache1 = Connection.GetDatabase(); 
    var redisServer1 = Connection.GetServer(Connection.GetEndPoints().First()); 
    var deleteTasks = new List<Task>(); 
    var counter = 0; 
    foreach (var key in redisServer1.Keys(pattern: pattern, database: 0, pageSize: 5000)) 
    { 
     deleteTasks.Add(cache1.KeyDeleteAsync(key)); 
     counter++; 
     if (counter % 1000 == 0) 
      Console.WriteLine($"Delete key tasks created: {counter}"); 
    } 
    return Task.WhenAll(deleteTasks); 
} 

然後刪除由模式鍵,你可以使用它像這樣:

DeleteKeysByPatternAsync("*user:*").Wait(); //If you are calling from main method for example where you cant use await. 

await DeleteKeysByPatternAsync("*user:*"); //If you run from async method 

你可以調整pageSize或接收爲方法para米

0

對於我您的問題了解你需要將你的數據按照一定的標準(在你的情況的用戶),這樣,每當涉及到這個標準的記錄被改變,所有的與該記錄相關的數據在使用單個緩存api調用的緩存中也失效。

您可以在Azure中使用NCache for Azure這個分佈式緩存解決方案來實現這一點,Alachisoft提供了一個分佈式緩存解決方案,它具有豐富的功能以及多個緩存拓撲。

NCache允許多種方式來執行此類型的操作。一個適合您的使用案例是數據分組功能,它允許您在添加時將分組/子組中的數據分組。數據可以稍後在組/子組的基礎上獲取/刪除。

NCache還允許添加添加項目的標籤。這些標籤可用於移除/提取包含一個或多個指定標籤的所有數據。在NCache中提供的查詢功能(刪除查詢)也可用於刪除滿足特定條件的數據。

+0

好的,非常感謝您的回覆,我會盡力回覆。 – 2014-11-26 08:48:28