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

前言

 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细解析Linux /etc/passwd文件

在Linux /etc/passwd文件中每个用户都有一个对应的记录行&#xff0c;它记录了这个用户的一些基本属性。系统管理员经常会接触到这个文件的修改以完成对用户的管理工作。这个文件对所有用户都是可读的。但是Linux /etc/passwd文件中都有些什么内容呢&#xff1f; 它的内容类似下…

linux eclipse 头文件路径,Eclipse CDT标准库头文件设置

使用eclipse cdt开发C/C项目的时候&#xff0c;从eclipse官网下的linux下的专门版本在Fedora上能自动Discovery机器上的gcc/g头文件、符号之类的&#xff0c;但是在我用的slackware下却不行&#xff0c;需要手动添加标准库头文件路径/usr/include、/usr/local/include……&…

Jquery通过遍历数组给checkbox赋默认值

需求&#xff1a;有一个数组&#xff1a;(北京菜&#xff0c;粤菜)&#xff0c;checkbox如下&#xff1a; 现在想通过遍历这个数组&#xff0c;使数组里包含的值&#xff0c;在checkbox选中 代码&#xff1a; var flavors new Array([北京菜 , 粤菜]); $.each(flavors,functio…

/etc/fstab和/etc/mtab的区别!

etc/fstab文件的作用 记录了计算机上硬盘分区的相关信息&#xff0c;启动 Linux 的时候&#xff0c;检查分区的 fsck 命令&#xff0c;和挂载分区的 mount 命令&#xff0c;都需要 fstab 中的信息&#xff0c;来正确的检查和挂载硬盘。 /etc/mtab文件的作用&#xff1a;先看它的…

linux链接 .o,Linux 链接概念 - osc_8ieji7o1的个人空间 - OSCHINA - 中文开源技术交流社区...

1.Linux 链接概念Linux 链接分两种&#xff0c; 一种被称作硬链接(Hard Link)&#xff0c;另一种被称为符号链接(Symbolic Link).默认情况下&#xff0c;ln 命令产生硬链接。硬连接硬链接指通过索引节点来进行连接。再Linux的文件系统中&#xff0c;保存在磁盘分区中的文件不管…

php模拟post提交数据,用处很多,可用来网站的采集,登陆等等

1. [代码][PHP]代码 <?php//以程序登陆一个论坛登录为例 function bbslogin($user_login, $password, $host, $port "80") {//需要提交的post数据$argv array(cookie > array(user_login > $user_login, password > $password, _wp_http_referer…

关闭SQLite3中的journal暂存档

相信很多使用SQLite3当做数据库的人都会一个现象&#xff0c;那就是当SQLite3有做写入的动作时&#xff0c;SQLite3会自动产生一个名为"数据库名称-journal"的暂存档。这是做什么用的呢? 答案是用来Rollback &#xff0c;换句话说&#xff0c;就是当数据写入数据库有…

linux中gid和groups区别,linux用户与组管理

linux安全系统的核心是用户账户&#xff0c;每个使用者使用一个账户名及与该账户关联的密码登入linux系统。使用者对系统资源的访问权限取决于其登录时所用的账户。每个账户在创建时会被分配一个惟一的标识UID&#xff0c;用户权限便是根据UID来跟踪的。每个账户可以选择加入某…

Win8 IIS 安装和部署网站问题

安装IIS 比较win7的安装来说&#xff0c;多选了几个钩钩&#xff0c;不然会报错&#xff0c;偶就遇到这样的错误。 控制面板-》程序和功能-》启动和关闭windows功能&#xff0c;钩钩图例&#xff1a; 安装好iis后 在控制面板-》管理工具 目前只用过iis 信息管理器。 6.0 大概…

sqlite3 journal

sqlite3默认会开启journal&#xff0c;为了进行rollback。但是在突然断电的情况下&#xff0c;journal文件很容易就损坏了。 目前还没有发现数据库文件本身被损坏的情况。 一旦journal文件损坏&#xff0c;就没法打开数据库文件了。但是可以把journal机制关闭。 一旦journa…

linux 计划任务 实例,计划任务 cron 的配置和实例

1、计划任务概说&#xff1b;计划任务&#xff0c;是任务在约定的时间执行已经计划好的工作&#xff0c;这是表面的意思。在Linux中&#xff0c;我们经常用到 crond服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的作务。比如我们可以在配置文件中约定…

产品经理们都是怎样成为产品经理的?

一百多个回答中发现很多人的答案讲得是做产品经理之前大家是做什么的或者产品经理是做什么的&#xff0c;这样又造成恶性循环让更多的人这样回答&#xff0c;不过问题本身的描述就有误导性&#xff0c;不怪回答者。我想问问题的人其实是想知道或者说想让别人知道&#xff0c;在…

QString与中文问题

QString 与中文问题2010-07-11 17:04(更新&#xff1a;本文的姊妹篇 Qt中translate、tr关系 与中文问题 )首先呢&#xff0c;声明一下&#xff0c;QString 是不存在中文支持问题的&#xff0c;很多人遇到问题&#xff0c;并不是本身 QString 的问题&#xff0c;而是没有将自己希…

在SharePoint 2010中创建网站的权限级别

转&#xff1a;http://www.360sps.com/Item/CreatePermissionLevels.aspx 权限级别是SharePoint 2010新增加的功能&#xff0c;使我们对权限的设置又提高了一个层次。SharePoint 2010的权限级别指的是可分配给用户或用户组的单个权限组。SharePoint 2010自带的权限级别有&#…

Qt 编码问题QTextCodec

一般在Window开发环境里&#xff0c;是GBK编码&#xff0c;在Linux开发环境里&#xff0c;是utf-8编码&#xff0c;关于编码的定义&#xff0c; 我就不这里多说了&#xff0c;网上有一大堆资料可以查看。 qt对默认的是unicode编码&#xff0c;在Window开发环境里&#xff0c;比…

linux suse11 nfs,suse11 nfsserver服务安装

1概述目的&#xff1a;因为suse11的nfs服务安装和suse10安装有许多不同之处&#xff0c;为了方便以后使用suse11的人使用nfs服务&#xff0c;特写此文档2安装说明A suse11默认不会nfsserver服务&#xff0c;需要安装nfs-kernel-server此包。suse10默认安装nfssever服务&#…

Merge Two Sorted Lists

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. if... else if不要偷懒直接写 if...if... /*** Definition for singly-linked list.* struct ListNode {* int val;* …

V210 系统时间设置

date -s "2015-08-30 20:46:30" hwclock -w

Linux中重定向及管道,Linux中重定向及管道

1重定向1.1 重定向符号> 输出重定向到一个文件或设备 覆盖原来的文件>! 输出重定向到一个文件或设备 强制覆盖原来的文件>> 输出重定向到一个文件或设备 追加原来的文件1.2标准错误重定向符号2> 将一个…

仿新浪微盾客户端项目简介一

最经公司的项目需要实现类似于新浪微盾功能的功能&#xff0c;因此我把这个实战的demo的经历分享给大家。 新浪微盾是啥子玩意&#xff1f; 微盾是由新浪网推出的一款产生一次性动态密码的产品&#xff0c;可以用于新浪旗下各服务&#xff0c;包括新浪微博&#xff0c;新付通&a…