我寫一個包裝器API提供了一套方法值,類似的東西:CouchBase .NET API - 設置鍵,用於特定的桶
Set(string bucket, string key, object value)
我需要的是,如果一個供應桶不可用 - 我需要使用默認存儲桶,否則將其存儲到特定存儲桶。
我可以想到的一種方式是實例化CouchbaseClient,並在try ... catch塊內提供存儲桶,如果失敗,則將其存儲在默認存儲桶中。有沒有更好的辦法?
我寫一個包裝器API提供了一套方法值,類似的東西:CouchBase .NET API - 設置鍵,用於特定的桶
Set(string bucket, string key, object value)
我需要的是,如果一個供應桶不可用 - 我需要使用默認存儲桶,否則將其存儲到特定存儲桶。
我可以想到的一種方式是實例化CouchbaseClient,並在try ... catch塊內提供存儲桶,如果失敗,則將其存儲在默認存儲桶中。有沒有更好的辦法?
一般而言,您不想實例化一個客戶端請求。第一次連接到集羣的開銷並不是微不足道的。因此,建議您爲每個應用程序域的每個存儲桶創建一個靜態實例。客戶端也具有存儲桶關聯性,因此,如果不重新實例化客戶端,則無法切換存儲桶。
有關配置多個存儲桶的信息,請參閱http://www.couchbase.com/wiki/display/couchbase/Couchbase+.NET+Client+Library。
如果創建了多個桶配置部分按照上面,你可以有你的方法是這樣的:
private static Dictionary<string, CouchbaseClient> _clientDict = new Dictionary<string, CouchbaseClient>();
public IStoreResult Set(string key, object value, string bucketName, string bucketPassword = "")
{
if (! _clientDict.ContainsKey(bucketName))
{
_clientDict[bucketName] = new CouchbaseClient(bucketName); //assume this matches the config section name
}
return _clientDict[bucketName].ExecuteStore(StoreMode.Set, key, value);
}
我還沒有實際運行這段代碼,但這樣的事情應該工作。只要記住你必須有一個匹配的配置部分。因此,使用wiki示例,您的字典中有兩個鍵 - 「bucket-a」和「bucket-b」。
客戶端的下一個版本將支持通過REST API查詢存儲桶,但這會影響觸摸的性能。這些位應儘快下載爲Developer Preview 4。在這種情況下,您將能夠添加對新CouchbaseCluster對象的ListBuckets方法的調用,並檢查返回列表中的存儲桶。如果存在該存儲桶,則可以緩存其關聯的CouchbaseClient。