CouchBase .NET API - 设置特定存储桶的密钥值

时间:2012-09-05 00:03:13

标签: c# couchbase

我正在编写一个包装器api来提供一个类似于的方法:

Set(string bucket, string key, object value)

我需要的是,如果提供的存储桶不可用 - 我需要使用默认存储桶,否则将其存储到特定存储桶。

我能想到的一种方法是在try ... catch块中使用提供的存储桶实例化CouchbaseClient,如果失败则将其存储在默认存储桶中。还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

一般来说,您不希望实例化每个请求的客户端。第一次连接到群集的开销并非微不足道。因此,建议您为每个应用程序域创建一个静态实例。客户端也具有存储桶关联性,因此如果不重新安装客户端,则无法切换存储桶。

有关配置多个存储桶的信息,请参阅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查询存储桶,但这会影响性能。这些比特应该很快就会作为开发者预览版4。在这种情况下,您将能够添加对新CouchbaseCluster对象的ListBuckets方法的调用,并在返回列表中检查存储桶。如果该存在桶存在,则可以缓存其关联的CouchbaseClient。