C#分布式缓存二:Asp.Net中使用Couchbase
2015-09-26 23:23
731 查看
前言
上一篇《C#分布式缓存一:Couchbase的安装与简单使用》主要讲解对Couchbase服务端的安装配置和客户端的引用调用,通过代码来完成最简单的实现调用。本次通过简单的配置,来完成一个简单的Asp.Net客户端调用,基于dotNetFramework4.0,Couchbase客户端版本只能用CouchbaseNetClient.1.3.12及以下。项目添加和配置文件
第一步:首先配置文件配置,打开Web.config文件,在configuration中添加以下内容:<configSections> <section name="couchbase" type="Couchbase.Configuration.CouchbaseClientSection, Couchbase"/> </configSections> <couchbase> <servers bucket="default" bucketPassword=""> <add uri="http://127.0.0.1:8091/pools"/> </servers> </couchbase>
说明:Servers节点下只添加了一个URI,而且是我的本机。这个地方通常会配置多个URI列表,是客户端获取集群的配置信息。默认Couchbase 服务端安装是一个名为default、没有密码的存储区(bucket),所以这里存储区密码(bucketpassword)的属性为可选。如果你创建了一个已认证的存储区,必须在bucketPassword中配置那个值。这里暂时就先使用默认的。
第二步:添加一个类库。命名为CacheLibrary,添加Couchbase客户端DLL引用。项目结构如下图:
CouchbaseClient的CRUD操作
在实际开发中,创建客户端的实例是昂贵的。 这里就创建一个单一的客户端实例,也就是单列。第一步:缓存接口
/// <summary> /// 缓存接口 /// </summary> interface ICacheManager { /// <summary> /// 添加缓存 /// </summary> /// <param name="key"></param> /// <param name="obj"></param> /// <returns></returns> bool AddCache(string key, object obj); /// <summary> /// 添加缓存带过期时间 /// </summary> /// <param name="key"></param> /// <param name="obj"></param> /// <param name="minutes"></param> /// <returns></returns> bool AddCache(string key, object obj, int minutes); /// <summary> /// 获取缓存 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <returns></returns> T GetCache<T>(string key) where T : class; /// <summary> /// 清除指定Key的缓存 /// </summary> /// <param name="key"></param> /// <returns></returns> bool ClearCache(string key); /// <summary> /// 清除所有的缓存 /// </summary> void FlushAll(); }
第二步:缓存的实现及单例
/// <summary> /// 单例模式缓存的实现 /// </summary> public class CouchbaseCacheFactory:ICacheManager { //创建一个静态的只读对象(用于下面的加锁) private static readonly object SyncRoot = new object(); #region 缓存工厂的基础属性字段,静态构造方法 private static readonly CouchbaseClient _instance; //静态构造函数,在类初始化的时候执行,不用加 public / private 没有意义,因为这个是由.net自动来调用 static CouchbaseCacheFactory() { _instance = new CouchbaseClient(); } private static CouchbaseClient Instance { get { return _instance; } } #endregion #region 工厂单例 private static CouchbaseCacheFactory _shareInstance; public static CouchbaseCacheFactory GetCurrentCache() { if (_shareInstance == null) lock (SyncRoot) { _shareInstance = new CouchbaseCacheFactory(); } return _shareInstance; } #endregion #region CRUD 接口的实现 /// <summary> /// 添加缓存(序列化保存) /// </summary> /// <param name="key"></param> /// <param name="obj"></param> /// <returns></returns> public bool AddCache(string key, object obj) { //注意:如果直接使用object来保存,则Couchbase缓存会帮我们自动加密(Base64) //如果先序列化后,再保存,那么就不会加密 string strJson = JsonConvert.SerializeObject(obj); return Instance.Store(StoreMode.Set, key, strJson); } /// <summary> /// 添加缓存并设置时间(序列化保存) /// </summary> /// <param name="key"></param> /// <param name="obj"></param> /// <param name="minutes"></param> /// <returns></returns> public bool AddCache(string key, object obj, int minutes) { string strJson = JsonConvert.SerializeObject(obj); return Instance.Store(StoreMode.Set, key, strJson, DateTime.Now.AddMinutes(minutes)); } /// <summary> /// 通过Key清除缓存 /// </summary> /// <param name="key"></param> /// <returns></returns> public bool ClearCache(string key) { return Instance.Remove(key); } /// <summary> /// 设置缓存过期(失效后通过Get取不出来) /// </summary> public void FlushAll() { Instance.FlushAll(); } /// <summary> /// 获取缓存(返回反序列化后的结果) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <returns></returns> public T GetCache<T>(string key) where T : class { string strJson = Instance.Get<string>(key); if (string.IsNullOrEmpty(strJson)) { return null; } else { return (T)JsonConvert.DeserializeObject(strJson,typeof(T)); } } #endregion }
说明:
StoreMode.Add ,StoreMode.Replace 和 StoreMode.Set 的区别
Add ,表示添加一个新的key
Replace ,表示更新一个已经存在的key
set ,表示如果key不存在则添加、存在则更新。
如果key已经存在那么Add就会失败,如果key不存在Replace操作会失败。所以建议还是用 Set吧!
添加方法返回值是一个bool类型,表示操作是否成功。
删除操作比较简单,Remove返回一个bool类型的返回值,表示操作是否成功。
第三步:页面上简单调用
新建一个页面:Index.aspx,再添加几个控件
Key:<asp:TextBox ID="txtKey" runat="server"></asp:TextBox> Value:<asp:TextBox ID="txtValue" runat="server"></asp:TextBox><br /> <asp:Button ID="btnAdd" runat="server" Text="添加" OnClick="btnAdd_Click" /> <asp:Button ID="btnGet" runat="server" Text="获取" OnClick="btnGet_Click" /> <asp:Button ID="btnDel" runat="server" Text="删除" OnClick="btnDel_Click" /><br /> 信息:<asp:Label ID="lblInfo" runat="server" Text="Label"></asp:Label>
效果如下:
[b]测试结果[/b]
1.添加:CouchbaseCacheFactory.GetCurrentCache().AddCache(strKey, strValue)后台管理也可以看到:
2获取. strValue = CouchbaseCacheFactory.GetCurrentCache().GetCache<string>(strKey);
3.删除:CouchbaseCacheFactory.GetCurrentCache().ClearCache(strKey);
刷新后台,看不到值了:
Couchbase Json扩展方法
如果想简单的读写JSON, 在Couchbase.Extensions命名空间下CouchbaseClientExtensions类提供了两个方法, StoreJson 和 GetJson。这两个方法都是依赖于开源类库: Newtonsoft.Json。这两个只是简单的对get和store方法的重写。新建一个实体类:Person,用JsonProperty标签。
public class Person { [JsonProperty("id")] public string Id { get; set; } [JsonProperty("fullName")] public string FullName { get; set; } }
上面的接口实现类中已经用Newtonsoft.Json序列化存储了。看下效果:
下面使用get和store方法实现,代码:
//配置服务器 CouchbaseClientConfiguration cbcc = new CouchbaseClientConfiguration(); //设置各种超时时间 cbcc.SocketPool.ReceiveTimeout = new TimeSpan(0, 0, 2); cbcc.SocketPool.ConnectionTimeout = new TimeSpan(0, 0, 4); cbcc.SocketPool.DeadTimeout = new TimeSpan(0, 0, 10); //使用默认的数据库 cbcc.Urls.Add(new Uri("http://127.0.0.1:8091/pools/default")); //建立一个Client,装入Client的配置 CouchbaseClient client = new CouchbaseClient(cbcc); Person per = new Person() { Id = "102", FullName = ".Net" }; //存储 client.StoreJson(StoreMode.Set, "p2", per); //取 var json = client.GetJson<Person>("p2");
启用Flush
安装的时候在配置bucket类型时,注意最下面的 Flush,选中后,可以支持 Flush, 否则不支持,在 .NET 客户端进行 Flush,会得到一个异常。一旦安装完成,在管理界面上,没有重新配置 Flush 的选项,如果在安装的时候没有启用 Flush ,在安装结束之后希望启用,怎么办呢?可以使用 couchbae-cli 命令行。这个命令位于 Couchbase 安装目录中的 \Couchbase\Server\bin 文件夹中。
对于启用 Flush 来说,是修改 bucket 的配置参数,需要使用 bucket-edit 命令,使用 --bucket 指定修改配置的 bucket,--enable-flush=1 表示启用,=0 显示就是禁用了。剩下的参数是管理员的帐号和口令:
couchbase-cli bucket-edit --bucket=default --enable-flush=1 -c 127.0.0.1 -u Administrator -p 123456
如果成功的话,服务器会返回一个说明:SUCCESS: bucket-edit。然后重启Couchbase服务即可。
总结
这一篇主要是学习如何在项目中的简单使用,现在做的项目中,应用.Net的缓存作处理。如果有机会一定要在项目中用Couchbase进行实践,那样才会更深入。代码百度网盘,VS2015打开。同时希望各位大神指导下,呵呵。
相关文章推荐
- ASP.NET MVC 此安装不支持该项目类型解决方法
- 使用Aspose.Words把 word转成图片
- Asp.net MVC3 CSS 模板
- ASP.NET MVC —— Model之一模型模板
- ASP.NET验证控件二
- ASP.NET验证控件一
- 阿里云上从ASP.NET线程角度对“黑色30秒”问题的全新分析
- ASP.NET GridView中加入RadioButton不能单选的解决方案
- 如何解决ASP.NET新增时多字段取值的问题
- ASP.NET显示渐变图片实现方法
- 异常总结--org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException错误
- ASP.NET文件处理如何操作
- ASP.NET Forms身份认证详解
- 关于ASP.NET MVC4中,下载APK文件错误
- ASP.NET中的几种弹出框提示基本实现方法
- ASP.NET MVC 随想录——开始使用ASP.NET Identity,初级篇(转)
- ASP.NET MVC 随想录—— 使用ASP.NET Identity实现基于声明的授权,高级篇
- ASP.MVC 6.0
- ASP.NET Forms身份认证详解
- ASP.NET文件处理如何操作