前言

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

见http://www.cnblogs.com/aehyok/p/3436721.html

主要讲解Couchbase服务端的安装配置和客户端的引用调用,然后通过一个零配置的代码来完成最简单的代码实现调用。那么本次课先通过简单的配置文件进行配置,来完成一个简单的客户端调用。如果你还不太熟悉Couchbase的安装,那么你可以参考上一篇的入门来进行安装。

配置文件配置调用

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

<?xml version="1.0" encoding="utf-8" ?>
<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><startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup>
</configuration>

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

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

using Couchbase;
using Couchbase.Configuration;
using Couchbase.Extensions;
using Enyim.Caching;
using Enyim.Caching.Configuration;
using Enyim.Caching.Memcached;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace MemcachedTest
{class Program{static void Main(string[] args){var client = new CouchbaseClient();//client.Cas(StoreMode.Set, "Test", "aehyok");var str = client.Get("Test");Console.WriteLine(str);Console.ReadLine();}}
}

简单优化CouchbaseClient

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

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

在此我建立了一个管理类

using Couchbase;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace MemcachedTest
{/// <summary>/// 实现单例模式/// </summary>public class CouchbaseManager{private static CouchbaseClient couchbaseClient;private static readonly object syncRoot=new object();    ////程序运行时创建一个静态的只读对象private CouchbaseManager(){}public static CouchbaseClient GetInstance(){if (couchbaseClient == null){lock (syncRoot){if (couchbaseClient == null){couchbaseClient = new CouchbaseClient();}}}return couchbaseClient;}}
}

然后就可以直接调用了

        static void Main(string[] args){var client = CouchbaseManager.GetInstance();client.Cas(StoreMode.Set, "Test", "aehyok");var str = client.Get("Test");Console.WriteLine(str);Console.ReadLine();}

CouchbaseClient CRUD操作

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

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

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

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

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

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

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

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

删除操作比较简单。

删除操作使用key去调用Remove方法,类似其他方法,Remove返回一个bool类型的返回值,表示操作是否成功。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方法的重写。

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace MemcachedTest
{public class Test{[JsonProperty("F_Name")]public string FirstName { get; set; }[JsonProperty("L_Name")]public string Lastname { get; set; }}
}

客户端的调用

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

总结

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

转载于:https://www.cnblogs.com/johnwood/p/3558037.html

分布式缓存应用(转载的)相关推荐

  1. hadoop 分布式缓存

    Hadoop 分布式缓存实现目的是在所有的MapReduce调用一个统一的配置文件,首先将缓存文件放置在HDFS中,然后程序在执行的过程中会可以通过设定将文件下载到本地具体设定如下: public s ...

  2. 大数据【四】MapReduce(单词计数;二次排序;计数器;join;分布式缓存)

       前言: 根据前面的几篇博客学习,现在可以进行MapReduce学习了.本篇博客首先阐述了MapReduce的概念及使用原理,其次直接从五个实验中实践学习(单词计数,二次排序,计数器,join,分 ...

  3. memcache的分布式缓存问题

    memcache的分布式缓存问题 memcache是优异的缓存解决方案,很多项目都有使用. memcache服务本身并不具备分布式缓存的能力,它提供的就是对{key, value}对的访问能力,分布式 ...

  4. 分布式缓存Redis Centos下单节点安装

    声明: 网上关于分布式缓存Redis的学习资料很多,大家可以去网上找些资料去学习. 另外 JEESZ框架面向企业的大型互联网分布式企业架构,分布式缓存是必不可少的,故这边总结了一些关于分布式缓存Red ...

  5. .NET分布式缓存Memcached测试体验

    一直在学习关注大访问量网站的缓存是如何实现,之前看过Memcached的资料,忙于没有时间来真正测试一下,今天测试下分布式缓存Memcached 首先要在缓存服务器上安装安装:memcached(1. ...

  6. Apache Ignite——集合分布式缓存、计算、存储的分布式框架

    Apache Ignite内存数据组织平台是一个高性能.集成化.混合式的企业级分布式架构解决方案,核心价值在于可以帮助我们实现分布式架构透明化,开发人员根本不知道分布式技术的存在,可以使分布式缓存.计 ...

  7. 分布式缓存之Memcache

    〇.为什么要用分布式缓存 1.软件从单机到分布式 走向分布式第一步就是解决:多台机器共享登录信息的问题. 例如:现在有三台机器组成了一个Web的应用集群,其中一台机器用户登录,然后其他另外两台机器共享 ...

  8. 高性能服务器架构思路(五)——分布式缓存

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文由韩伟原创文章,转载请注明出处:  文章原文链接:https://www.qcloud.com/communit ...

  9. 如何构建高性能web站点之:分布式缓存

    一.数据库前段的缓冲区 要明白数据库前段的缓冲区,首先要明白什么是文件系统内核缓冲区(Buffer Area):它位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘的读 ...

  10. 5个强大的Java分布式缓存框架推荐

    2019独角兽企业重金招聘Python工程师标准>>> 在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没 ...

最新文章

  1. 从老板身上偷学的东西,你能吗?
  2. solr定时实时重建索引和增量更新
  3. jquery层级原则器(匹配后代元素div)
  4. 针对Parse error: syntax error, unexpected T_PUBLIC in D:报错提醒
  5. python_day29_通过类创建多线程_队列
  6. MySQL binlog后面的编号最大是多大?【老叶茶馆公众号】
  7. PopWindow:基本使用与自定义PopWindow
  8. LeetCode常见报错解释
  9. 计算广告学(Computational Advertising)概述学习
  10. 公共关系礼仪实务章节测试题——公共关系的类型(六)
  11. oppo r5 android 7.1,OPPO R5的手机系统是什么?OPPO R5能升级安卓4.4吗?
  12. eclipse使用性能剖析工具TPTP的较好方案
  13. java里面不等于怎么打_不等于在c语言中怎么打
  14. CE认证和CCC认证区别?
  15. 局域网内PC通过笔记本共享上网
  16. UNIX操作系统中加锁和解锁
  17. ubuntu rsyslog mysql_Ubuntu下rsyslog集中收集mysql审计日志
  18. 【C# protected internal】访问级别控制解释
  19. 【数据库】查洵选修课程学生的学号
  20. 实况足球10长传和争顶技巧

热门文章

  1. 知乎问答:现在程序员的工资是不是被高估了?
  2. CodeForces 580A Kefa and First Steps
  3. 算法前戏 递归 二分查找 列表查找
  4. JavaScript 随意整理2
  5. 寻找字符串中第一个仅仅出现一次打字符
  6. php server 性能,PHP中:$_SERVER[‘REQUEST_TIME’]和 time()有什么区别,那个性能快!...
  7. java orika_常见Bean映射工具分析评测及Orika介绍
  8. maven jar包冲突的发现与解决[工具篇]
  9. 移动数据文件、控制文件、日志文件
  10. java maven调用hbase