前言

  上一篇《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" />&nbsp;<asp:Button ID="btnGet" runat="server" Text="获取" OnClick="btnGet_Click" />&nbsp;
<asp:Button ID="btnDel" runat="server" Text="删除" OnClick="btnDel_Click" /><br />
信息:<asp:Label ID="lblInfo" runat="server" Text="Label"></asp:Label>

  效果如下:

   

测试结果

  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(, , );
cbcc.SocketPool.ConnectionTimeout = new TimeSpan(, , );
cbcc.SocketPool.DeadTimeout = new TimeSpan(, , );
//使用默认的数据库
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 = "", 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= -c 127.0.0.1  -u Administrator -p 

  如果成功的话,服务器会返回一个说明:SUCCESS: bucket-edit。然后重启Couchbase服务即可。

  

总结

  这一篇主要是学习如何在项目中的简单使用,现在做的项目中,应用.Net的缓存作处理。如果有机会一定要在项目中用Couchbase进行实践,那样才会更深入。

代码百度网盘,VS2015打开。同时希望各位大神指导下,呵呵。

  

C#分布式缓存二:Asp.Net中使用Couchbase的更多相关文章

  1. Asp.Net中使用Couchbase——Memcached缓存使用篇

    Asp.Net中使用Couchbase——Memcached缓存使用篇 前言 在上一篇Asp.Net中使用Couchbase——Memcached缓存入门篇http://www.cnblogs.com ...

  2. 用分布式缓存提升ASP.NET Core性能

    得益于纯净.轻量化并且跨平台支持的特性,ASP.NET Core作为热门Web应用开发框架,其高性能传输和负载均衡的支持已广受青睐.实际上,10-20台Web服务器还是轻松驾驭的.有了多服务器负载的支 ...

  3. C# Azure 存储-分布式缓存Redis在session中的配置

    1. 开始 对于分布式的缓存,平常的session的处理是一个用户对应一台分布式的机器,如果这台机器中途挂机或者不能处理这个用户session的情况发生,则此用户的session会丢失,会发生不可预知 ...

  4. (二)ASP.NET中JavaScript的中英文(多语言)实现方案(二)

    在ASP.NET中JavaScript的中英文(多语言)实现方案中简单的介绍了js实现多语言的一种方案.下面将要讲述另外一种方法,尽管很相似,但是有些地方也是需要细细琢磨的,不说了,先看看. 在Lan ...

  5. Asp.Net中使用Couchbase——Memcached缓存入门篇

    本文个人同步博客地址: http://aehyok.com/Blog/Detail/96.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文 ...

  6. .NET Core应用中使用分布式缓存及内存缓存

    .NET Core针对缓存提供了很好的支持 ,我们不仅可以选择将数据缓存在应用进程自身的内存中,还可以采用分布式的形式将缓存数据存储在一个“中心数据库”中.对于分布式缓存,.NET Core提供了针对 ...

  7. Redis中的Java分布式缓存

    为什么在分布式Java应用程序中使用缓存?今天学习了两节优锐课讲解分布式缓存的内容,收获颇多,分享给大家. 在提高应用程序的速度和性能时,每毫秒都是至关重要的.例如,根据Google的一项研究,如果网 ...

  8. Redis-基本概念、java操作redis、springboot整合redis,分布式缓存,分布式session管理等

    NoSQL的引言 Redis数据库相关指令 Redis持久化相关机制 SpringBoot操作Redis Redis分布式缓存实现 Resis中主从复制架构和哨兵机制 Redis集群搭建 Redis实 ...

  9. ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存

    ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 part 1:给我点时间,允许我感慨一下2016年 正好有时间,总结一下最近使用的一些技术,也算是为2016年画上一个完 ...

随机推荐

  1. scrollView实现基础中心点缩放及与UIPageControl结合使用

    一般来说scrollView与UIPageControl都是结合使用,因为在使用滚动视图的时候 ,使用UIPageControl,用户可以 清楚 的明白显示的内容有多少页,如果 没有的话,总不能让用户 ...

  2. linux grep命令详解

    linux grep命令详解 简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 ...

  3. Sql 数据引擎中删除用户名、密码信息

    SQl版本:Microsoft SQL Server 2008 R2 系统:Windows Server 2008 R2 Enterprise 删除文件为:SqlStudio.bin 删除星系路径:C ...

  4. gitlab 配置

    一.Gitlab的使用 具体步骤: 1.打开 Git Bash,输入~ssh -keygen  然后一直回车,直至出现图片上的内容 1) 2) 2.然后自动生成.ssh文件夹,双击文件夹 1) 2) ...

  5. nodejs 下载,安装,测试(windows环境下)

    1.下载 nodejs英文官网:http://nodejs.org/ nodejs中文官网:http://nodejs.cn/ 两个都可以下载,用户可以根据自己的网络来选择用哪个下载. 进入官网之后版 ...

  6. LoadRunner参数化详解(转)

    距离上次使用loadrunner 已经有一年多的时间了.初做测试时在项目中用过,后面项目中用不到,自己把重点放在了工具之外的东西上,认为性能测试不仅仅是会用工具,最近又想有一把好的利器毕竟可以帮助自己 ...

  7. [转载] Android中Xposed框架篇---利用Xposed框架实现拦截系统方法

    本文转载自: http://www.wjdiankong.cn/android%E4%B8%ADxposed%E6%A1%86%E6%9E%B6%E7%AF%87-%E5%88%A9%E7%94%A8 ...

  8. POJ 2010 - Moo University - Financial Aid 初探数据结构 二叉堆

    考虑到数据结构短板严重,从计算几何换换口味= = 二叉堆 简介 堆总保持每个节点小于(大于)父亲节点.这样的堆被称作大根堆(小根堆). 顾名思义,大根堆的数根是堆内的最大元素. 堆的意义在于能快速O( ...

  9. ajax 调用 JSON.parse();

    $.ajax({           type : "POST",           data:{            createStartTime:createStartT ...

  10. HTML5和CSS3基础教程(第8版)-读书笔记(4)

    第16章 表单 表单有两个基本组成部分:访问者在页面上可以看见并填写的控件.标签和按钮的集合:以及用于获取信息并将其转化为可以读取或计算的格式的处理脚本. 基本的表单字段类型包括文本框.单选按钮.复选 ...