實例解析.NET版分布式緩存Memcached_.Net教程
推薦:試析ASP.NET的IIS映射ASP.NET默認擴展名為.aspx,可是我們看到許多網站的擴展名很特別,比如校內的do。個性之余還可以實現簡單的偽靜態(即把后綴改為html)不過相對URLRewriter來說,是有點簡陋(只能改掉連接中的.aspx),不過不失為一種方法。下面我們就來實現他! 先來說一下
下面測試下分布式緩存Memcached軟件,一直在學習關注大訪問量網站的緩存是如何實現,之前看過Memcached的資料,忙于沒有時間來真正測試一下,本文測試分布式緩存Memcached的環境如下:(兩臺電腦作為服務器)
第一臺:
CPU:Inter(R) Pentium(R) 4 CPU 2.8G
內存:1G
系統:windows 7
IIS: IIS 7
IP:172.10.1.97
環境:本地
安裝:memcached 1.2.1 for Win32
第二臺:
CPU:Inter(R) Pentium(R) 4 CPU 3.0G
內存:2G
系統:windows Server 2003
IIS: IIS 6
IP:172.10.1.236
環境:遠程
安裝:memcached 1.2.1 for Win32
測試程序部署到本地環境(172.10.1.97),開發工具VS2008 .NET3.5
本文使用到memcached 1.2.1 for Win32下載地址:
http://jehiah.cz/projects/memcached-win32/
更多memcached版本大全請進入
http://www.xueit.com/html/2009-11-12/32-1550931594781.html
好了,下面我們按步驟來測試:
第一、首先到把下載好的memcached 1.2.1解壓到C:\memcached目錄,分別復制到兩臺服務器中。
第二、安裝memcached服務,在命令提示符輸入CD c:\memcached進入到memcached目錄,如下圖:
之后輸入memcached -h 回車,看幫助說明,接下來輸入memcached -d install 回車即可自動安裝memcached服務了,如下圖:
安裝memcached服務圖
安裝好安裝memcached服務后,輸入memcached -d start 回車啟動memcached服務,如下圖:
啟動memcached服務圖
在172.10.1.97與172.10.1.236兩臺電腦都按以上操作來安裝啟動memcached。
第三、下載.NET版memcached客戶端API組件來寫測試程序。
本文使用memcacheddotnet,下載地址如下:
http://sourceforge.net/projects/memcacheddotnet/
下載好之后把這些文件Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll放到bin目錄(少一個都不行),之后再到測試項目開發環境引用Memcached.ClientLibrary.dll,如下圖
引用Memcached.ClientLibrary.dll圖
第四、測試程序:
以下為引用的內容: using System; using System.Collections; using System.Text; // 須引用Memcached using Memcached.ClientLibrary; namespace test { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Request["action"] == "clear") this.clear(); else this.test(); } } /// <summary> /// 清空緩存 /// </summary> public void clear() { string[] servers = { "172.10.1.97:11211", "172.10.1.236:11211" }; //初始化池 SockIOPool pool = SockIOPool.GetInstance(); pool.SetServers(servers); pool.InitConnections = 3; pool.MinConnections = 3; pool.MaxConnections = 5; pool.SocketConnectTimeout = 1000; pool.SocketTimeout = 3000; pool.MaintenanceSleep = 30; pool.Failover = true; pool.Nagle = false; pool.Initialize(); MemcachedClient mc = new Memcached.ClientLibrary.MemcachedClient(); mc.EnableCompression = false; mc.Delete("cache"); mc.Delete("endCache"); Response.Write("清空緩存成功"); } /// <summary> /// 測試緩存 /// </summary> public void test() { //分布Memcachedf服務IP 端口 string[] servers = { "172.10.1.97:11211","172.10.1.236:11211" }; //初始化池 SockIOPool pool = SockIOPool.GetInstance(); pool.SetServers(servers); pool.InitConnections = 3; pool.MinConnections = 3; pool.MaxConnections = 5; pool.SocketConnectTimeout = 1000; pool.SocketTimeout = 3000; pool.MaintenanceSleep = 30; pool.Failover = true; pool.Nagle = false; pool.Initialize(); //客戶端實例 MemcachedClient mc = new Memcached.ClientLibrary.MemcachedClient(); mc.EnableCompression = false; StringBuilder sb = new StringBuilder(); //寫入緩存 sb.AppendLine("寫入緩存測試:"); sb.AppendLine("<br>_______________________________________<br>"); if (mc.KeyExists("cache")) { sb.AppendLine("緩存cache已存在"); } else { mc.Set("cache", "寫入緩存時間:" DateTime.Now.ToString()); sb.AppendLine("緩存已成功寫入到cache"); } sb.AppendLine("<br>_______________________________________<br>"); sb.AppendLine("讀取緩存內容如下:<br>"); sb.AppendLine(mc.Get("cache").ToString()); //測試緩存過期 sb.AppendLine("<br>_______________________________________<br>"); if (mc.KeyExists("endCache")) { sb.AppendLine("緩存endCache已存在,過期時間為:" mc.Get("endCache").ToString()); } else { mc.Set("endCache", DateTime.Now.AddMinutes(1).ToString(), DateTime.Now.AddMinutes(1)); sb.AppendLine("緩存已更新寫入到endCache,寫入時間:" DateTime.Now.ToString() " 過期時間:" DateTime.Now.AddMinutes(1).ToString()); } //分析緩存狀態 Hashtable ht = mc.Stats(); sb.AppendLine("<br>_______________________________________<br>"); sb.AppendLine("Memcached Stats:"); sb.AppendLine("<br>_______________________________________<br>"); foreach (DictionaryEntry de in ht) { Hashtable info = (Hashtable)de.Value; foreach (DictionaryEntry de2 in info) { sb.AppendLine(de2.Key.ToString() ": " de2.Value.ToString() "<br>"); } } Response.Write(sb.ToString()); } } |
第五、 運行看效果:
緩存效果圖我在本地172.10.1.97運行memcached -d
stop來停止memcached服務,運行上面程序,一樣正確,說明緩存也同樣保存到遠程172.10.1.236這臺服務器了。這樣簡單就可以實現分布式緩存,使用緩存又多了一個選擇,不必使用.NET自帶的Application與cache了,訪問量大的網站實現分布式緩存有很多好處。
分享:淺談ASP.NET的PHP執行速度上星期我在InfoQ發表了一篇新聞,對Joe Stagner在博客上發表的三篇關于ASP.NET與PHP性能對比的文章進行了總結。寫新聞其實挺不爽的,因為不能夾雜個人的看法,只能平鋪直敘陳述事實。當然,如果像某些新聞那樣換一種說法是可以騙過一些不明真相的群眾,但是
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發送Email實例(可帶附件)
- js實現廣告漂浮效果的小例子
- asp.net Repeater 數據綁定的具體實現
- Asp.Net 無刷新文件上傳并顯示進度條的實現方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數據庫(連接字符串的配置及獲取)
- asp.net頁面傳值測試實例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實現分頁示例代碼
- 相關鏈接:
- 教程說明:
.Net教程-實例解析.NET版分布式緩存Memcached。