2011年2月,CouchOne和memebase合并后,改名为Couchbase,官网地址(www.couchbase.com)。membase最后一个版本为1.7.2,可在Couchbase的官网下载(http://www.couchbase.com/downloads-all)。
这里不介绍couchbase的安装,只介绍.NET Client Librarye 使用。
-
获得CouchBase For Net的SDK有两种方式
- 通过nuget,Install-Package CouchbaseNetClient
- 通过官网下载http://www.couchbase.com/communities/net
-
开始CouchBase之旅
-
创建项目,这里需要提醒的是,在vs2010中我们创建类Console应用程序时项目默认使用.NET Framework Client
Profile,我们需要手动切换至full .NET Framework。
- 在程序中配置CouchBase,CouchBase提供编码配置和配置文件配置,当然使用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>
|
这里使用了集群配置的url列表,当然在你本地调试只需要一个地址,默认CouchBase在安装时会创建一个没有密码的default的缓存桶(bucket),你可以*修改这块的信息。(如果对bucket不太明白,请自行google)。
- 添加引用
using
Couchbase;
using
Couchbase.Configuration;
using
Couchbase.Extensions;
using
Enyim.Caching;
using
Enyim.Caching.Configuration;
using
Enyim.Caching.Memcached;
|
根据实际引用添加引用
- 创建实例及使用
var client = new
CouchbaseClient(); // 创建实例
client.Store(StoreMode.Add, "somekey", "somevalue"); //存储数据
var someValue = client.Get("somekey") as
string;
//获取数据
var someValue = client.Get<string>("somekey");
//获取数据
|
以上是简单基本类型的使用,下面我们介绍一下复杂类型。先申明一个类
[Serializable] public
class Beer
{ public
Guid Id { get;
set; }
public
string Name
{ get; set;
} public
string Brewery
{ get; set;
} }
|
var key = Guid.NewGuid(); var beer = new
Beer { Id =
key, Name =
"Old Yankee
Ale", Brewery =
"Cottrell Brewing
Company" }; client.Store(StoreMode.Add, "beer_"
+ key, beer);
var beer = client.Get<Beer>("beer_" + key);
|
在CouchBase2.0正式版就开始支持json,这一点让人激动人心。
存储json数据
public
static
bool
StoreJson<T>(this
CouchbaseClient client, StoreMode storeMode, string
key, T value) where
T : class
{ var ms
= new MemoryStream();
var serializer = new
DataContractJsonSerializer(typeof(T)); serializer.WriteObject(ms,
value); var
json = Encoding.Default.GetString(ms.ToArray());
ms.Dispose(); return
client.Store(storeMode, key, json);
}
|
获取json数据
public
static T
GetJson<T>(this
CouchbaseClient client, string
key) where T : class
{
var json = client.Get<string>(key);
var ms =
new
MemoryStream(Encoding.Default.GetBytes(json)); var serializer
= new DataContractJsonSerializer(typeof(T));
var obj = serializer.ReadObject(ms) as
T; ms.Dispose(); return
obj;
}
|
Client使用方法
var key = Guid.NewGuid(); var beer = new Beer { Id
= key, Name = "American Ale", Brewery =
"Thomas Hooker Brewing Company", Type =
"beer" }; client.StoreJson<Beer>(StoreMode.Add, "beer_" + key,
beer);
var beer = client.GetJson<Beer>("beer_" +
key);
|
-
检查和操作结果
官方的说明
For check and set operations, the return values are wrapped in a CasResult
instance. The success of the operation is still determined by a Boolean
and detailed failures still require logging.
var result = client.GetWithCas("foo"); var bar = "bar"; var
result = client.Cas(StoreMode.Set, "foo", bar, result.Cas); if
(result.Result) { Console.WriteLine("CAS operation was
successful"); }
|
-
获取详细操作结果
如果你需要获取运行时的详细信息,你可以使用IoperationResult API方法,下面是官方给的API属性的说明。
Each of these methods shares its name with a method from the single-value
return API, but prefixed with "Execute." For example, Get() becomes
ExecuteGet() and Store() becomes ExecuteStore().
Property
|
Interface
|
Description
|
Success
|
IOperationResult
|
Whether the
operation succeeded
|
Message
|
IOperationResult
|
Error, warning or
informational message
|
StatusCode
|
IOperationResult
|
Nullable status
code from server
|
InnerResult
|
IOperationResult
|
Nested
result. Populated by low-level I/O failures.
|
Value
|
INullableOperationResult
|
Extended by
IGetOperationResult, where Value is item for given
key.
|
HasValue
|
INullableOperationResult
|
Shortcut for null
Value check.
|
Cas
|
ICasOperationResult
|
Extended by
IGetOperationResult, IMutateOperationResult, IConcatOperationResult
and IStoreOperationResult. Contains possible CAS value for
operations.
|
var getResult = client.ExecuteGet<Beer>("beer_heady_topper"); if (getResult.Success && getResult.HasValue)
{
var beer
= getResult.Value;
beer.Brewery =
"The Alchemist"; var casResult = client.ExecuteCas(StoreMode.Set, "beer_heady_topper", beer,
getResult.Cas);
if (casResult.Success)
{
Console.WriteLine("CAS operation was successful"); } } else
{
Console.WriteLine("Get operation failed with message {0}
and exception {1} ",
getResult.Message, getResult.Exception); }
|
-
配置日志
CouchBase支持Log4Net和Nlog,你可以自己现在或者从CouchBase提供的SDK获取。
Log4Net 配置参考。
<?xml version="1.0"
encoding="utf-8"?> <configuration>
<configSections> <sectionGroup
name="enyim.com"> <section name="log"
type="Enyim.Caching.Configuration.LoggerSection, Enyim.Caching"
/> </sectionGroup> <section
name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,
log4net" /> </configSections>
<enyim.com> <log
factory="Enyim.Caching.Log4NetFactory, Enyim.Caching.Log4NetAdapter"
/> </enyim.com> <log4net
debug="false"> <appender name="LogFileAppender"
type="log4net.Appender.FileAppender,log4net">
<param name="File" value="c:\\temp\\error-log.txt" />
<param name="AppendToFile" value="true" />
<layout
type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x]
<%X{auth}> - %m%n" />
</layout> </appender>
<root> <priority value="ALL"
/> <level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
</root> </log4net>
</configuration>
|
更多Log4Net配置可参考:http://logging.apache.org/log4net/release/manual/configuration.html.
Nlog配置参考
<?xml version="1.0"
encoding="utf-8"?> <configuration>
<configSections> <sectionGroup
name="enyim.com"> <section name="log"
type="Enyim.Caching.Configuration.LoggerSection, Enyim.Caching"
/> </sectionGroup> <section
name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
</configSections> <enyim.com>
<log factory="Enyim.Caching.NLogFactory, Enyim.Caching.NLogAdapter"
/> </enyim.com> <nlog>
<targets> <target name="logfile"
type="File" fileName="c:\temp\error-log.txt" />
</targets> <rules>
<logger name="*" minlevel="Info" writeTo="logfile" />
</rules> </nlog>
<startup> <supportedRuntime version="v4.0"
sku=".NETFramework,Version=v4.0" />
</startup> </configuration>
|
更多Nlog配置可参考:http://nlog-project.org/wiki/Configuration_file
总结 :以上信息来源官方的Getting
Started,另附一份自己整理的Demo。(通过office word 发布的文档格式有些变形)
Demo源码
.NET 使用CouchBase 基础篇