河间二手房,色温表,御龙湾
这里不介绍couchbase的安装,只介绍.NET Client Librarye 使用。
获得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>
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Net Core Web Api项目与在NginX下发布的方法
asp.net core3.1 引用的元包dll版本兼容性问题解决方案
IdentityServer4实现.Net Core API接口权限认证(快速入门)
ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现
网友评论