本文不打算抄袭官方或者引用他人对Couchbase的各种描述,仅仅是自己对它的一点理解(错误之处,敬请指出),并附上一个入门示例。
ASP.NET Web项目(其他web开发平台也一样)应用规模小的时候,可以利用.net framework自带的缓存机制进行缓存,可是,当项目应用规模大了后,再这样万年不变的应用下去,恐怕难以取得良好效果。而C#本身是应用级开发语言,其擅长的是业务逻辑开发,而缓存这种与具体业务紧密程度不大的系统,用C#开发,显然不具有跨平台性,没有普适性,而且C#对缓存也基本停留在微软给啥,咱就有啥的阶段,并且效率也相对不高。因此,利用C、C++等系统级开发语言进行开发成为合适的选择。
具体到Couchbase,自己认为应该是Memcached、Membase、CouchDB的融合升级版,可以说是集合众家之长,目前应该是最先进的Cache系统。这一系统的出现,将极大促进各个web开发平台及自身的发展,真让人激动。
好了,下面是自己刚刚捣鼓成功的一个示例。
首先下载Couchbase server版本,自己下载的是2.5.1企业版。
安装成功后,按官方说法,会默认打开本地8091端口进行web管理。
这是内存使用及缓存被调动情况。
这是缓存桶使用情况。
以下为参照资料写的一个简易调用示例,先看效果图:
在用户姓名文本框中,输入缓存的用户名,点击“Cache User”按钮后,出现的画面。
这是缓存成功后,点击“GetCachedUser”按钮时出现的画面。
以下是代码部分:
调用代码需要使用Couchbase的客户端,下载后,在项目中引用:Cachebase.dll 和 Enyim.Caching.dll,之后在web.config中配置以下节点
<configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <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>
前台代码(html)部分:
<div id="body" style="text-indent: 10px"> 姓名:<input type="text" id="cacheuser" /> <input type="button" value="Cache User" οnclick="cacheUser();" /> <input type="button" value="GetCachedUser" οnclick="getCachedUser();" /> </div> <script type="text/javascript"> function cacheUser() { $.getServerJson('api/HomeAPI/GetCacheUser', { userName: $("#cacheuser").val() }, function (result) { alert(result); }); } function getCachedUser() { $.getServerJson('api/HomeAPI/GetCachedUser', { userName: $("#cacheuser").val() }, function (result) { alert(result); }); } </script>
C#代码部分如下:
public string GetCacheUser(string userName) { var client = CouchbaseManager.Instance; client.Remove(userName); bool result = client.Store(StoreMode.Add, userName, "我是:" + userName + ",找我有事吗?", LoginTimeSpan); return result == true ? "缓存成功。" : "缓存失败!"; } public string GetCachedUser(string userName) { var client = CouchbaseManager.Instance; object ob = client.Get(userName); return ob == null ? "抱歉,没有找到此人!" : ob.ToString(); }