首页 > 其他 > 详细

分布式缓存应用(转载的)

时间:2014-02-21 03:20:08      阅读:365      评论:0      收藏:0      [点我收藏+]

前言

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

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

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

配置文件配置调用

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

bubuko.com,布布扣
bubuko.com,布布扣
<?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>
bubuko.com,布布扣
bubuko.com,布布扣

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

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

bubuko.com,布布扣
bubuko.com,布布扣
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();
        }
    }
}
bubuko.com,布布扣
bubuko.com,布布扣

简单优化CouchbaseClient

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

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

在此我建立了一个管理类

bubuko.com,布布扣
bubuko.com,布布扣
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;
        }
    }
}
bubuko.com,布布扣
bubuko.com,布布扣

然后就可以直接调用了

bubuko.com,布布扣
bubuko.com,布布扣
        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();
        }
bubuko.com,布布扣
bubuko.com,布布扣

CouchbaseClient CRUD操作

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

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

bubuko.com,布布扣

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

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

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

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

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

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

删除操作比较简单。

bubuko.com,布布扣
删除操作使用key去调用Remove方法,类似其他方法,Remove返回一个bool类型的返回值,表示操作是否成功。

var result = client.Remove("Test");
bubuko.com,布布扣

CouchbaseClient  Json扩展方法

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

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

bubuko.com,布布扣
bubuko.com,布布扣
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; }

    }
}
bubuko.com,布布扣
bubuko.com,布布扣

客户端的调用

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

 

 bubuko.com,布布扣

总结

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

分布式缓存应用(转载的)

原文:http://www.cnblogs.com/johnwood/p/3558037.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!