(翻译)Couchbase-sdk-net 使用手册 1.2 -Chapter 1. 启程

Chapter 1. 启程

1.1. 取得服务端程序

下载并安装Couchbase 服务端,安装完回到这里然后继续。

1.2. 取得客户端类库

两个途径都可以:

1、  直接下载类库

2、  通过执行NuGet Package Manger命令:

PM> Install-Package CouchbaseNetClient

1.3. 试用

1.3.1 建立项目

通过visual studio 新建一个控制台程序,并且添加Couchbase.dll, Enyim.Memcached.dll,

Newtonsoft.Json.dll and RestSharp.dll这几个程序集的引用(这几个动态链接库可在下载的类库包中找到)

1.3.2 添加配置

       你可以使用编程方式或者使用couchbase 配置节在app.config文件中配置。使用app.config文件更新灵活,是优先采用的方法。

    按照下面配置你的app.config:

<?xml version="1.0"?>

<configuration>

<configSections>

<section name="couchbase" type="Couchbase.Configuration.CouchbaseClientSection, Couchbase"/>

</configSections>

<couchbase>

<servers bucket="default" bucketPassword="">

<add uri="http://192.168.0.2:8091/pools"/>

<add uri="http://192.168.0.3:8091/pools"/>

</servers>

</couchbase>

</configuration>

 

上面在Servers列表中的多个URI,是客户端获取信息的集群配置。如果在本机上运行,则只需要设置一个127.0.0.1的配置就可以了。

默认的Couchbase 服务端安装是创建一个名为default、没有密码的存储区(bucket),所以这里存储区密码(bucketpassword)的属性为可选。如果你创建了一个已认证的存储区,你必须在上面的设置中配置那个值。

       警告:

              在Windows系统默认分配了一些TCP/IP端口用于系统通信用。关于这个问题的更多信息,包括怎么去调整配置和增加可用的端口可以看Avoiding TCP/IP Port Exhaustion

1.3.3 客户端举例

在Program.cs文件中添加下面的声明:

using Couchbase;

using Enyim.Caching.Memcached;

using Newtonsoft.Json;

Couchbase命名空间中包含我们将会用到的客户端和配置类。

Enyim.Caching.Memcached包含基础设施的支持,记得Couchbase支持Memcached协议,因此可以使用流行的Enyim Memcached客户端的key/Value操作方式。

下一步在Main方法中创建一个客户端实例。

var client = new CouchbaseClient();

 

在这个练习中,这是一个不好的创建客户端的方式。这个客户端会引发创建连接池,并且建立一个线程去取得集群配置。因此,最好的方式是每个应用程序域和每个存储区(bucket)只创建一个客户端实例。为了这个目的,可以在一个类里面创建一个静态属性。

    public class CouchbaseManager

    {

        private readonly static CouchbaseClient _instance;

        static CouchbaseManager()

        {

            _instance = new CouchbaseClient();

        }

        public static CouchbaseClient Instance { get { return _instance; } }

}

1.3.4           CRUD操作

在.Net 客户端,主要的CRUP API是使用标准的Key/Value存储方式。你创建或者更新文本需要提供一个key和value。检索和移除文本需要根据提供的key进行。举个例子:

如果安装Couchbase Server和设置集群的时候把一个名为“beer-sample”存储区选中的话,可以在这个存储区中找到一个文本的key为“new_holland_brewing_company-sundog.”

{

"name": "Sundog",

"abv": 5.25,

"ibu": 0,

"srm": 0,

"upc": 0,

"type": "beer",

"brewery_id": "new_holland_brewing_company",

"updated": "2010-07-22 20:00:20",

"description": "Sundog is an amber ale as deep as the copper glow of a Lake Michigan sunset. Its biscuit malt give Sundog a toasty "style": "American-Style Amber/Red Ale",

"category": "North American Ale"

}

可以简单的调用get方法,就能得到这个文本的内容。

var savedBeer = client.Get("new_holland_brewing_company-sundog");

如果添加一行代码打印savedBeer到控制台,可以看到里面包含了一个json格式的字符串:

var savedBeer = client.Get("new_holland_brewing_company-sundog");

Console.WriteLine(savedBeer);

在这个例子里savedBeer 是一个Object类型,如果想得到一个string类型的对象,可以使用泛型版本的get

var savedBeer = client.Get<string>("new_holland_brewing_company-sundog");

 

为了演示添加文本,首先创建一个Json字符串。

var newBeer =

                @"{

                ""name"": ""Old Yankee Ale"",

                ""abv"": 5.00,

                ""ibu"": 0,

                ""srm"": 0,

                ""upc"": 0,

                ""type"": ""beer"",

                ""brewery_id"": ""cottrell_brewing"",

                ""updated"": ""2012-08-30 20:00:20"",

                ""description"": ""A medium-bodied Amber Ale"",

                ""style"": ""American-Style Amber"",

                ""category"": ""North American Ale""

                }";

这里简单的创建一个key,key的名字使用啤酒厂的名字和啤酒的名字使用破折号连接而成,空白替换成下换线,文字全部小写。这里要强调的一点,key的产生规则是必须始终不变的。如果你通过key去检索数据,你必须能预测到使用哪个key。

如var key = "cottrell_brewing-old_yankee_ale";

通过这个新的key,json文本可以简单的保存。

var result = client.Store(StoreMode.Add, key, newBeer);

 

这里使用了三个参数去保存。第一个参数是保存的模式,是一个枚举,Add表示添加一个新的key,Replace表示更新一个已经存在的key,set表示如果key不存在则添加、存在则更新。如果key已经存在add就会失败,如果key不存在Replace操作会失败。第二和第三个参数分别是key和value。

返回值是一个bool类型,表示操作是成功还是失败。

 

删除操作使用key去调用Remove方法,类似其他方法,Remove返回一个bool类型的返回值,表示操作是否成功。

var result = client.Remove("cottrell_brewing-old_yankee_ale");

 

1.3.5. 存储为Json文本

存储为Json格式的字符串是一个比较简单直接的操作,但是实际上我们很多时候会有存储领域对象的需求,更明白的讲我们会有很多直接存储数据的对象的需求。这个.Net 客户端类库支持存储可序列化的对象。当然这些可序列话的对象会作为Joson文本的二进制附件保存。它的影响是附件在查看的时候是没有索引的。更好的解决方案是在保存前,先把数据序列化成Json字符串;取出数据后,再反序列话Json字符串成对象。

 

1.3.6. CouchbaseClient JSON 扩展方法

如果想简单的读写JSON, 在Couchbase.Extensions命名空间下 CouchbaseClientExtensions类提供了两个方法, StoreJson 和 GetJson。这两个方法都是依赖于开源类库: Newtonsoft.Json library, (已经在Couchbase .NET类库的压缩包里面)。这两个只是简单的对get和store方法的重写,当前不支持复杂的CAS和TTL操作。

这里创建POCO类Beer,需要添加声明

using Newtonsoft.Json;

 

public class Beer

    {

        [JsonProperty("name")]

        public string Name { get; set; }

        [JsonProperty("abv")]

        public float ABV { get; set; }

        [JsonProperty("type")]

        public string Type

        {

            get { return "beer"; }

        }

        [JsonProperty("brewery_id")]

        public string BreweryId { get; set; }

        [JsonProperty("style")]

        public string Style { get; set; }

        [JsonProperty("category")]

        public string Category { get; set; }

}

 使用new 一个实例:

           var newBeer = new Beer

            {

                Name = "Old Yankee Ale",

                ABV = 5.00f,

                BreweryId = "cottrell_brewing",

                Style = "American-Style Amber",

                Category = "North American Ale"

            };

 

存储:

var result = client.StoreJson(StoreMode.Set, key, newBeer);

检索:

 

  var savedBeer = client.GetJson<Beer>(key);

在Program里面可以如下:

class Program

{

static void Main(string[] args)

{

var client = new CouchbaseClient();

var key = "cottrell_brewing-old_yankee_ale";

var newBeer = new Beer

{

Name = "Old Yankee Ale",

ABV = 5.00f,

BreweryId = "cottrell_brewing",

Style = "American-Style Amber",

Category = "North American Ale"

};

var result = client.StoreJson(StoreMode.Set, key, newBeer);

if (result)

{

var savedBeer = client.GetJson<Beer>(key);

Console.WriteLine("Found beer: " + savedBeer.Name);

}

}

}

 完整例子程序,需要安装vs2012

posted @ 2013-05-26 09:33  Tom.汤  阅读(1774)  评论(0编辑  收藏  举报