分布式缓存应用(转载的)
前言
?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
總結
以上是生活随笔為你收集整理的分布式缓存应用(转载的)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2012.12.26日学习笔记
- 下一篇: 反向题在测试问卷信效度_[问卷的信度和效