2010-06-26 76 views
0

我有以下代碼:Memcached的複製到多臺服務器

private bool CheckForDuplicatesInCache(Message theMessage) 
{ 
    var cacheClient = MemcachedClient.GetInstance("IntegrationCache"); 
    var messageHash = theMessage.GetHashCode(); 
    if (cacheClient.Get(messageHash.ToString()).IsNotNull()) 
    { 
     IntegrationContext.WriteLog("Warning: This message is a duplicate. Will Not Process."); 
     return false; 
    }   

    cacheClient.Set(messageHash.ToString(), "nothing", new TimeSpan(2, 0, 0)); 

    return true; 
} 

的問題是,當我這個擴展到多臺服務器...我需要有多個memcached的intances共享數據冗餘。有沒有人有任何見解?

回答

1

有2種方式理論上你就可以做到這一點:

有一個叫repcached產品,但它只能運行在Linux上現在。它有能力將緩存複製到不同的服務器。

其他選項在代碼中:您可以將值寫入兩個緩存並在兩個chaches中檢查它。如果你添加了2臺以上的服務器,你可以在for循環中進行。

 private bool CheckForDuplicatesInCache(Message theMessage) 
    { 
     var cacheClient = MemcachedClient.GetInstance("IntegrationCache"); 
     var cacheClient2 = MemcachedClient.GetInstance("IntegrationCache2"); 
     var messageHash = theMessage.GetHashCode(); 
     if (cacheClient.Get(messageHash.ToString()).IsNotNull()) 
     { 
      IntegrationContext.WriteLog("Warning: This message is a duplicate. Will Not Process."); 
      return false; 
     } 

     if (cacheClient2.Get(messageHash.ToString()).IsNotNull()) 
     { 
      IntegrationContext.WriteLog("Warning: This message is a duplicate. Will Not Process."); 
      return false; 
     } 

     cacheClient.Set(messageHash.ToString(), "nothing", new TimeSpan(2, 0, 0)); 
     cacheClient2.Set(messageHash.ToString(), "nothing", new TimeSpan(2, 0, 0)); 
     return true; 
    } 
+0

我喜歡那樣......看起來像是一種黑客,我會試一試。 – 2010-06-26 22:04:36

相關問題