Asp.Net中使用Couchbase——Memcached缓存使用篇
Asp.Net中使用Couchbase——Memcached缓存使用篇
前言
在上一篇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>作为缓存的简单处理。当然其中有很多问题,可以再研究一下,比如如何建立一个存储库等等。如果有机会一定要在项目中进行实践,那样学习的才会更深入。
Asp.Net中使用Couchbase——Memcached缓存使用篇的更多相关文章
- Asp.Net中使用Couchbase——Memcached缓存入门篇
本文个人同步博客地址: http://aehyok.com/Blog/Detail/96.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文 ...
- Memcached缓存入门篇
Asp.Net中使用Couchbase——Memcached缓存入门篇 前言 本文的主要目的就是简单的进行使用Memcached.这是Memchahed的官网http://memcached.org/ ...
- C#分布式缓存二:Asp.Net中使用Couchbase
前言 上一篇<C#分布式缓存一:Couchbase的安装与简单使用>主要讲解对Couchbase服务端的安装配置和客户端的引用调用,通过代码来完成最简单的实现调用.本次通过简单的配置,来完 ...
- 【ASP.NET 系列】浅谈缓存技术在ASP.NET中的运用
本篇文章虽不谈架构,但是Cache又是架构中不可或缺的部分,因此,在讲解Cache的同时,将会提及到部分架构知识,关于架构部分,读者可以不用理解,或者直接跳过涉及架构部分的内容 你只需关心Cache即 ...
- 浅谈缓存技术在ASP.NET中的运用
本篇文章虽不谈架构,但是Cache又是架构中不可或缺的部分,因此,在讲解Cache的同时,将会提及到部分架构知识,关于架构部分,读者可以不用理解,或者直接跳过, 你只需关心Cache即可,具体的架构, ...
- 秒懂ASP.NET中的内置对象
上篇博客,小编主要简单的介绍了一下ASP.NET中的控件,这篇博客,小编主要简单总结一下ASP.NET中的内置对象,七个内置对象分别是:Request.Response.Application.Coo ...
- Python项目使用memcached缓存
前言许多Web应用都将数据保存到MySQL这样的关系型数据库管理系统中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大.访问的集中,就会出现数据库的负担加重.数据库响应恶化. 网站显示延 ...
- Spring Boot:使用Memcached缓存
综合概述 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统.Memcached基于内存的key-value存储,用来存储小块的任意数据,这些数据可以是数据库调用.API调用或者是页面 ...
- 通过spring.net中的spring.caching CacheResult实现memcached缓存
通过spring.net中的spring.caching CacheResult实现memcached缓存1.SpringMemcachedCache.cs2.APP.config3.Program. ...
随机推荐
- 在MVC5中的使用Ninject
在MVC5中的使用 Ninject 从MVC3中就开始接触Ninject这个IOC工具.也一直是MVC Framework系列书籍中推荐的IOC工具,当然还有优秀的Autofac等.性能和使用上面个有 ...
- 软体project(四)——一生
软件生存周期是软件project中的一个重要概念,把整个生存周期划分为若干个阶段,是实现软件生产project化的重要步骤. 软件的生存周期一般划分为软件计划.软件开发和软件执行三个时期,例如以下图: ...
- Floodlight Controller 路线原则
SDN的出现能够使得各种复杂的路由协议从原本的Device OS中剥离出来,放在SDN Controller中.Controller用一种简单的协议来和全部的Router进行通信.就能够获得 ...
- TFTP server组态
TFTP server组态 2014-10-31北京海淀区 张俊浩 一.TFTP(Trivial File Transfer Protocol,简单文件传输协议或称小型文件传输协议) 是一种简化的文 ...
- 将图片转为ASCII字符画
原文:将图片转为ASCII字符画 Copyright 2012 Conmajia 源代码下载:点击这里 什么是字符画?就是用ASCII字符来近似组成图像,就像这样: ╭╮ ╭╮ ││ ││ ╭┴┴—— ...
- vs2012连接sql2008(错误类型:Could not load file or assembly)
发生错误: Sql Server2008数据库中有一个数据库. 我想ORM-Entity FrameWork技术,在自己主动了一个项目,建立一个实体类! 解决的方法: 出现上面的情况.是由于缺少了这两 ...
- Asp.net MVC + EF + Spring.Net 项目实践(三)
这一篇要整合Model层和Repository层,提供一个统一的操作entity的接口层,代码下载地址(博客园上传不了10M以上的文件,所以用了百度):http://pan.baidu.com/s/1 ...
- SQL2005性能分析一些细节功能你是否有用到?(二)
原文:SQL2005性能分析一些细节功能你是否有用到?(二) 上一篇:SQL2005性能分析一些细节功能你是否有用到? 我简单的提到了些关于SQL性能分析最基本的一些方法,下面的文章我会陆续补充.前面 ...
- Theano学习笔记(一)——代数
标量相加 import theano.tensor as T from theano import function x = T.dscalar('x') y = T.dscalar('y') z = ...
- 【转】关于“ORA-01653: 表 SYS.AUD$ 无法通过 128 (在表空间 SYSTEM 中) 扩展”的错误
SQL*Plus: Release 11.1.0.6.0 - Production on 星期一 5月 17 18:31:08 2010 Copyright (c) 1982, 2007, Oracl ...