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

前言

在上一篇Asp.Net中使用Couchbase——Memcached缓存入门篇http://www.cnblogs.com/aehyok/p/3436721.html主要讲解的就是对Couchbase服务端的安装配置和客户端的引用调用,然后通过一个零配置的代码来完成最简单的代码实现调用。那么本次课先通过简单的配置文件进行配置,来完成一个简单的客户端调用。如果你还不太熟悉Couchbase的安装,那么你可以参考上一篇的入门来进行安装。

配置文件配置调用

第一步:首先上一下配置文件

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3. <configSections>
  4. <section name="couchbase" type="Couchbase.Configuration.CouchbaseClientSection, Couchbase"/>
  5. </configSections>
  6. <couchbase>
  7. <servers bucket="default" bucketPassword="">
  8. <add uri="http://127.0.0.1:8091/pools"/>
  9. </servers>
  10. </couchbase>
  11. <startup>
  12. <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  13. </startup>
  14. </configuration>

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

第二步:客户端命名空间的引用,然后我还是直接建立的控制台应用程序,通过Nuget来添加Couchbase。

  1. using Couchbase;
  2. using Couchbase.Configuration;
  3. using Couchbase.Extensions;
  4. using Enyim.Caching;
  5. using Enyim.Caching.Configuration;
  6. using Enyim.Caching.Memcached;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12.  
  13. namespace MemcachedTest
  14. {
  15. class Program
  16. {
  17. static void Main(string[] args)
  18. {
  19. var client = new CouchbaseClient();
  20. //client.Cas(StoreMode.Set, "Test", "aehyok");
  21. var str = client.Get("Test");
  22. Console.WriteLine(str);
  23. Console.ReadLine();
  24. }
  25. }
  26. }

简单优化CouchbaseClient

在上面的调用中也只是一个简单的示例,但是针对创建客户端的方式,可能会引发创建连接池的问题,并且建立了一个线程去取得集群的配置。因此,比较好的方式是每个应用程序域和每个存储区(bucket)只创建一个客户端实例。为了这个目的,可以通过单例模式来实现。

如果你对单例模式不太了解的话,可以看下我之前的一篇文章,有关单例模式的简单理解http://www.cnblogs.com/aehyok/archive/2013/05/08/3066127.html

在此我建立了一个管理类

  1. using Couchbase;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace MemcachedTest
  9. {
  10. /// <summary>
  11. /// 实现单例模式
  12. /// </summary>
  13. public class CouchbaseManager
  14. {
  15. private static CouchbaseClient couchbaseClient;
  16. private static readonly object syncRoot=new object(); ////程序运行时创建一个静态的只读对象
  17. private CouchbaseManager(){}
  18. public static CouchbaseClient GetInstance()
  19. {
  20. if (couchbaseClient == null)
  21. {
  22. lock (syncRoot)
  23. {
  24. if (couchbaseClient == null)
  25. {
  26. couchbaseClient = new CouchbaseClient();
  27. }
  28. }
  29. }
  30. return couchbaseClient;
  31. }
  32. }
  33. }

然后就可以直接调用了

  1. static void Main(string[] args)
  2. {
  3. var client = CouchbaseManager.GetInstance();
  4. client.Cas(StoreMode.Set, "Test", "aehyok");
  5. var str = client.Get("Test");
  6. Console.WriteLine(str);
  7. Console.ReadLine();
  8. }

CouchbaseClient CRUD操作

  1. var client = CouchbaseManager.GetInstance();
  2. client.Cas(StoreMode.Add, "Test", "aehyok");
  3. client.Store(StoreMode.Add,"Test1","aehyok1");

测试这两个方法都可以进行创建,其中第一个参数StoreMode

Add=1,表示添加一个新的key

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

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

如果key已经存在那么Add就会失败,如果key不存在Replace操作会失败。

第二个和第三个参数分别是key和value。

返回值是一个bool类型,表示操作是成功还是失败。

删除操作比较简单。

  1. 删除操作使用key去调用Remove方法,类似其他方法,Remove返回一个bool类型的返回值,表示操作是否成功。
  2.  
  3. var result = client.Remove("Test");

CouchbaseClient  Json扩展方法

  存储为Json格式的字符串是一个比较简单直接的操作,但是实际上我们很多时候会有存储领域对象的需求,更明白的讲我们会有很多直接存储数据的对象的需求。这个.Net 客户端类库支持存储可序列化的对象。当然这些可序列话的对象会作为Joson文本的二进制附件保存。它的影响是附件在查看的时候是没有索引的。更好的解决方案是在保存前,先把数据序列化成Json字符串;取出数据后,再反序列话Json字符串成对象。

  如果想简单的读写JSON, 在Couchbase.Extensions命名空间下 CouchbaseClientExtensions类提供了两个方法, StoreJson 和 GetJson。这两个方法都是依赖于开源类库: Newtonsoft.Json library, (已经在Couchbase .NET类库的压缩包里面)。这两个只是简单的对get和store方法的重写。

  1. using Newtonsoft.Json;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace MemcachedTest
  9. {
  10. public class Test
  11. {
  12. [JsonProperty("F_Name")]
  13. public string FirstName { get; set; }
  14.  
  15. [JsonProperty("L_Name")]
  16. public string Lastname { get; set; }
  17.  
  18. }
  19. }

客户端的调用

  1. var client = CouchbaseManager.GetInstance();
  2. Test test = new Test() { FirstName = "aehyok", Lastname = "Leo" };
  3. client.StoreJson(StoreMode.Set, "JsonTest", test);
  4. var json = client.GetJson<Test>("JsonTest");

总结

这一篇主要是来学习如何在项目中的简单使用,不过暂时也没机会在真正项目中进行应用。现在做的小项目中,只是应用静态Dictionry<string,object>作为缓存的简单处理。当然其中有很多问题,可以再研究一下,比如如何建立一个存储库等等。如果有机会一定要在项目中进行实践,那样学习的才会更深入。

 
 

Asp.Net中使用Couchbase——Memcached缓存使用篇的更多相关文章

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

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

  2. Memcached缓存入门篇

    Asp.Net中使用Couchbase——Memcached缓存入门篇 前言 本文的主要目的就是简单的进行使用Memcached.这是Memchahed的官网http://memcached.org/ ...

  3. C#分布式缓存二:Asp.Net中使用Couchbase

    前言 上一篇<C#分布式缓存一:Couchbase的安装与简单使用>主要讲解对Couchbase服务端的安装配置和客户端的引用调用,通过代码来完成最简单的实现调用.本次通过简单的配置,来完 ...

  4. 【ASP.NET 系列】浅谈缓存技术在ASP.NET中的运用

    本篇文章虽不谈架构,但是Cache又是架构中不可或缺的部分,因此,在讲解Cache的同时,将会提及到部分架构知识,关于架构部分,读者可以不用理解,或者直接跳过涉及架构部分的内容 你只需关心Cache即 ...

  5. 浅谈缓存技术在ASP.NET中的运用

    本篇文章虽不谈架构,但是Cache又是架构中不可或缺的部分,因此,在讲解Cache的同时,将会提及到部分架构知识,关于架构部分,读者可以不用理解,或者直接跳过, 你只需关心Cache即可,具体的架构, ...

  6. 秒懂ASP.NET中的内置对象

    上篇博客,小编主要简单的介绍了一下ASP.NET中的控件,这篇博客,小编主要简单总结一下ASP.NET中的内置对象,七个内置对象分别是:Request.Response.Application.Coo ...

  7. Python项目使用memcached缓存

    前言许多Web应用都将数据保存到MySQL这样的关系型数据库管理系统中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大.访问的集中,就会出现数据库的负担加重.数据库响应恶化. 网站显示延 ...

  8. Spring Boot:使用Memcached缓存

    综合概述 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统.Memcached基于内存的key-value存储,用来存储小块的任意数据,这些数据可以是数据库调用.API调用或者是页面 ...

  9. 通过spring.net中的spring.caching CacheResult实现memcached缓存

    通过spring.net中的spring.caching CacheResult实现memcached缓存1.SpringMemcachedCache.cs2.APP.config3.Program. ...

随机推荐

  1. jquery密码强度检测

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. Swift学习笔记(一)搭配环境以及代码运行成功

    原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...

  3. Java NIO的多路复用及reactor

    (from:http://developer.51cto.com/art/201112/306489.htm) 以下描述,为了说明问题,就提提历史(类似的东西,网上一搜一大把,但是希望你能在这里止步, ...

  4. 【百度地图API】北京周边7日游——图标按路线轨迹行动

    原文:[百度地图API]北京周边7日游--图标按路线轨迹行动 任务描述: 春节就要来啦~酸奶小妹的妈妈要从遥远的重庆,来到北京过春节呢!酸奶小妹忙着给妈妈计划,北京周边的旅游线路.计划好路线后,就开始 ...

  5. SQL2005性能分析一些细节功能你是否有用到?(三)

    原文:SQL2005性能分析一些细节功能你是否有用到?(三) 继上篇: SQL2005性能分析一些细节功能你是否有用到?(二) 第一: SET STATISTICS PROFILE ON 当我们比较查 ...

  6. finally 对 return 值没有影响

    public int gettest(ref int i, ref int k) { int j = 0; try { return i / j; } catch (Exception Ex) { k ...

  7. C# 实现设置系统环境变量设置

    原文:C# 实现设置系统环境变量设置 以前实现系统环境变量设置时是要在电脑属性--高级--环境变量设置,实现方式主要有2种, 修改注册表,添加环境变量 调用系统Kernel32.DLL函数,设置环境变 ...

  8. Windows下结束tomcat进程,dos命令

    Microsoft Windows [版本 6.1.7601]版权所有 (c) 2009 Microsoft Corporation.保留所有权利. C:\Users\Administrator> ...

  9. deb包+软件图标+添加到系统菜单+举例安装卸载

    本文介绍的内容和实验一下: 1. 制造deb包.2. 为了使软件图标.3. 开始菜单中添加到系统中的软件:4. 安装和卸载制作的deb包. 1. 制作deb包 制作deb包的方法可能有多种,本文使用的 ...

  10. oracle中导入导出数据备份数据库

    原文:oracle中导入导出数据备份数据库 数据库所在位置                         将数据导出到的文件名                    用户名 备份数据库 :exp c ...