在上一篇文章里面 ( Windows系统下Memcached缓存系列一:Couchbase(服务器端)和CouchbaseClient(c#客户端)的安装教程 ),我们介绍了服务器端的安装和客户端的安装,以及一个简单的例子,这一篇介绍详细的使用方法.

这次以一个web项目为例.

配置文件配置调用

第一步:首先上一下配置文件,在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"/>
<!--<add uri="http://192.168.0.3:8091/pools"/>-->
</servers>
</couchbase>
<!--配置缓存结束-->

可以看到Servers节点下只添加了一个URI,而且是我的本机。这个地方通常会配置多个URI列表,是客户端获取信息的集群配置。默认的Couchbase 服务端安装是创建一个名为default、没有密码的存储区(bucket),所以这里存储区密码(bucketpassword)的属性为可选。如果你创建了一个已认证的存储区,你必须在上面的设置中配置那个值。这里暂时就先使用默认的进行吧。

第二步: 编写缓存接口,实例化客户端,增删改查

在实际开发中,创建客户端的实例是昂贵的。 客户端会增加开销,因为它创建连接池并设置线程获得集群配置。 因此,最好的做法是创建一个单一的客户端实例,也就是单列。

我们创建一个类,这个类的静态属性就是我们的实例。 下面是代码

2.1 缓存接口

public interface ICacheManager
{
bool AddCache(string key, object obj);
T GetCache<T>(string key) where T : class;
bool ClearCache(string key);
bool AddCache(string key, object obj, int minutes);
void FlushAll();
}

2.2 缓存的实现,以及单例
//缓存工厂
public class MemCacheFactory : ICacheManager //继承缓存的接口
{
private static readonly object SyncRoot = new object(); //程序运行时创建一个静态的只读对象(用于下面的加锁) #region 缓存工厂的基础属性字段,静态构造方法 private static readonly CouchbaseClient _instance; //静态构造函数,在类初始化的时候执行,不用加 public / private 没有意义,因为这个是由.net自动来调用
//在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类
static MemCacheFactory()
{
_instance = new CouchbaseClient();
} private static CouchbaseClient Instance
{
get { return _instance; }
} #endregion #region CRUD 接口的实现 #region AddCache 添加缓存(以序列化保存) /// <summary>
/// 添加缓存
/// </summary>
/// <param name="key"></param>
/// <param name="obj"></param>
/// <returns></returns>
public bool AddCache(string key, object obj)
{
//注意:如果我们直接是用obj来保存,则缓存会帮我们自动加密
//如果我们按照下面的方法,先序列化后,再保存,那么就不会加密
string jsonobj = JsonConvert.SerializeObject(obj);
return Instance.Store(StoreMode.Set, key, jsonobj);
} #endregion #region AddCache 添加缓存并设置时间(以序列化保存) /// <summary>
/// AddCache 添加缓存并设置时间(以序列化保存)
/// </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 jsonobj = JsonConvert.SerializeObject(obj);
return Instance.Store(StoreMode.Set, key, jsonobj, DateTime.Now.AddMinutes(minutes));
} #endregion #region GetCache 获得缓存(并且是已经反序列化的) /// <summary>
/// 获得缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public T GetCache<T>(string key) where T : class
{
string jsonobj = Instance.Get<String>(key);
if (string.IsNullOrEmpty(jsonobj))
return null;
return (T) JsonConvert.DeserializeObject(jsonobj, typeof (T)); } #endregion #region ClearCache 清除缓存 /// <summary>
/// 清除缓存
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool ClearCache(string key)
{
return Instance.Remove(key);
} #endregion #region FlushAll 设置缓存过期(失效后通过get就取不出来了) /// <summary>
/// 设置缓存过期(失效后通过get就取不出来了)
/// </summary>
public void FlushAll()
{
Instance.FlushAll();
} #endregion #endregion #region 工厂的单例 private static MemCacheFactory _shareInstance; public static MemCacheFactory GetCurrentMemCache()
{
if (_shareInstance == null)
lock (SyncRoot)
{
_shareInstance = new MemCacheFactory();
}
return _shareInstance;
} #endregion }

StoreMode.Add ,StoreMode.Replace 和 StoreMode.Set 的区别

Add ,表示添加一个新的key

Replace ,表示更新一个已经存在的key

set ,表示如果key不存在则添加、存在则更新。

如果我们不使用set,而是用 Add和Replace的话,可能会报错,报错的原因如下  :如果key已经存在那么Add就会失败,如果key不存在Replace操作会失败。

所以建议还是用 Set吧

 

 

(注意里面有意思的地方,obj的值如果是序列化的,则服务器上显示的是序列化的值,不加密.  如果obj的值不序列化,那么服务器会加密)

也就是如果我们的添加保存的方法里面,把obj进行了序列化,那么服务器上显示的值,就是序列化后的字符串

public bool AddCache(string key, object obj, int minutes)
{
string jsonobj = JsonConvert.SerializeObject(obj);
return Instance.Store(StoreMode.Set, key, jsonobj, DateTime.Now.AddMinutes(minutes));
}

如果我们保存的obj就是一个对象的话,那么服务器上显示的就是这个对象加密过的数据

public bool AddCache(string key, object obj, int minutes)
{
//string jsonobj = JsonConvert.SerializeObject(obj);
//return Instance.Store(StoreMode.Set, key, jsonobj, DateTime.Now.AddMinutes(minutes));
return Instance.Store(StoreMode.Set, key, obj, DateTime.Now.AddMinutes(minutes));
}

总结: 支持中文的key,如果保存的值是一个对象,那么服务器上保存的是对象加密后的值,如果保存的是一个序列化的字符串,则服务器上保存的是字符串.

如果我们保存的序列化的值,我们通过Json属性来更改,会怎么样? 例如下面有这样的类,上面用JsonProperty打了标签,保存到缓存会怎么样?
public class Person
{
[JsonProperty("id")]
public string Name { get; set; }
[JsonProperty("myaddress")]
public string Address { get; set; }
}

保存到缓存里面

如果是我们获取到缓存之后,是使用  .Name 还是 .id 呢?  答案是:还是用 .Name

var temp=MemCacheFactory.GetCurrentMemCache().GetCache<Person>(txtkey);
litResult.Text = temp.Name

最后写一下使用方法

protected void btnAdd_Click(object sender, EventArgs e)
{
string txtkey = txtKey.Text.Trim();
string txtvalue = txtValue.Text.Trim(); MemCacheFactory.GetCurrentMemCache().AddCache(txtkey, txtvalue);
Response.Redirect("add.aspx"); }

 

疑问: 好像是不能使用  FlushAll的

Windows系统下Memcached缓存系列二:CouchbaseClient(c#客户端)的详细试用,单例模式的更多相关文章

  1. Windows系统下Memcached缓存系列一:Couchbase(服务器端)和CouchbaseClient(c#客户端)的安装教程

    一:服务器端的安装  官网 http://www.couchbase.com/download  我的电脑是64位的win7,找到对应下载windows版本的服务器端缓存,大概90M的样子 运行期间可 ...

  2. windows系统下安装MySQL

    可以运行在本地windows版本的MySQL数据库程 序自从3.21版以后已经可以从MySQL AB公司获得,而且 MYSQL每日的下载百分比非常大.这部分描述在windows上安装MySQL的过程. ...

  3. Linux 下 Memcached 缓存服务器安装配置

    Linux 下 Memcached 缓存服务器安装配置 [日期:2011-08-06] 来源:Linux社区  作者:Linux [字体:大 中 小]   [安装Memcache服务器端]我目前的平台 ...

  4. WINDOWS系统下四叶草CLOVER引导U盘制作

    一.所需软件1.下载BootDiskUtility链接:http://pan.baidu.com/s/1bwBFyu 密码:glyk 2.下载Clover r3330 USB链接:http://pan ...

  5. Git 版本控制工具使用介绍------Windows系统下使用

    Git 是用于 Linux内核开发的版本控制工具.与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持(wingeddevil注:这得分是用什 ...

  6. windows系统下c语言暂停程序

    原文:windows系统下c语言暂停程序 windows系统下,很多C语言初学者的调试时,往往没看到结果程序就退出了,据我所知的方法主要有以下几种 方法一: #include int main() { ...

  7. Mac和Windows系统下Mysql数据库的导入导出

    最近在构建数据库的过程中,需要将Mac os系统下的Mysql数据库导出成.sql文件,然后导入到windows系统下的Mysql中.经过学习总结出的步骤如下: 一.Mac os导出Mysql数据库 ...

  8. Windows系统下的TCP参数优化(注册表\TCPIP\Parameters)

    转自:https://blog.csdn.net/libaineu2004/article/details/49054261 Windows系统下的TCP参数优化   TCP连接的状态与关闭方式及其对 ...

  9. Python3.x:pyodbc连接Sybase数据库操作(Windows系统下DNS模式)

    Python3.x:pyodbc连接Sybase数据库操作(Windows系统下DNS模式) 一.安装模块pyodbc pip install pyodbc 二.配置odbc数据源 (1).windo ...

随机推荐

  1. Sqli-labs less 25

    Less-25 本关主要为or and过滤,如何绕过or和and过滤.一般性提供以下几种思路: 大小写变形 Or,OR,oR 编码,hex,urlencode 添加注释/*or*/ 利用符号 and= ...

  2. codeforces 425A Sereja and Swaps(模拟,vector,枚举区间)

    题目 这要学习的是如何枚举区间,vector的基本使用(存入,取出,排序等),这题的思路来自: http://www.tuicool.com/articles/fAveE3 //vector 可以用s ...

  3. LoaderManager使用详解(三)---实现Loaders

    这篇文字将介绍Loader<D>类,并且介绍自定义Loader的实现.这是本系列的第三篇文章.   一:Loaders之前世界 二:了解LoaderManager 三:实现Loaders ...

  4. CamShift算法

    拟采用的方法,CamShift算法,即"Continuously Apative Mean-Shift"算法,是一种运动跟踪算法.它主要通过视频图像中运动物体的颜色信息来达到跟踪的 ...

  5. HDU 5151 Sit sit sit 区间DP + 排列组合

    Sit sit sit 问题描述 在一个XX大学中有NN张椅子排成一排,椅子上都没有人,每张椅子都有颜色,分别为蓝色或者红色. 接下来依次来了NN个学生,标号依次为1,2,3,...,N. 对于每个学 ...

  6. UVA 10943 How do you add? DP

    Larry is very bad at math — he usually uses a calculator, whichworked well throughout college. Unfor ...

  7. Linux Shell查看磁盘分区,内存使用,CPU使用率

    Linux Shell查看磁盘分区,内存使用,CPU使用率 #!/bin/bash #disk_used_rate Location=/dev/xvdb Disk_Used_Rate=$(df -h ...

  8. QT中显示GIF图片

    在QT中要显示GIF图片,不能通过单单的添加部件来完成. 还需要手动的编写程序. 工具:QT Creator 新建一个工程,我们先在designer中,添加一个QLabel部件. 如下图: 将QLab ...

  9. Struts2笔记——struts.xml配置详解

    访问HelloWorld应用的路径的设置 * 在struts1中,通过<action path=“/primer/helloWorldAction.action”>节点的path属性指定访 ...

  10. Linux系统VIM编辑器

    vim,linux系统中一款超好用的文本编辑器,是vi的升级版. 三种操作模式 命令模式: 控制光标移动,可对文本进行删除.恢复.黏贴等工作 输入模式: 正常的文本录入 末行模式: 保存,退出与设置编 ...