下面測試下分布式緩衝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圖
第四、
測試程式:
View Code
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了,訪問量大的網站實現分布式緩衝有很多好處。
有什麼問題請指正,下期再出其它教程。
轉自:http://www.xueit.com/asp.net/show-4880-2.aspx