.NET 使用CouchBase 基础篇
获得CouchBase For Net的SDK有两种方式
通过nuget,Install-Package CouchbaseNetClient
通过官网下载https://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="https://192.168.0.2:8091/pools"/>
<add uri="https://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>
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>
推荐阅读
-
IOS-—UICollectionView使用综述(二 )(基础篇--画廊展示图片,瀑布流展示图片)
-
IOS-—UICollectionView使用综述(一 )(基础篇--垂直列表方式,横向相册方式)
-
win64bit环境下Git安装和TortoiseGit详细使用教程【基础篇】
-
MySQL基础篇(03):系统和自定义函数总结,触发器使用详解
-
.net core使用ocelot---第七篇 服务发现
-
.net core使用ocelot---第一篇 简单使用
-
.net core使用ocelot---第二篇 身份验证
-
.net core使用ocelot---第五篇 服务质量
-
.net core使用ocelot---第八篇 Consul
-
.net core使用ocelot---第六篇 负载均衡