1.新建ASP.NET站点,将Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll添加到web引用。
2.为了进行后续的测试,我们创建两个aspx页面,memcache.aspx和nomemcache.aspx,memcache.aspx是使用MemcacheClient类加入了缓存机制的页面。nomemcache.aspx是没有加入缓存机制的页面,直接连接的数据库。一会我们通过观察数据库事件和进行压力测试来测试在压力测试的情况下应用程序的性能。
3.memcache.aspx.cs中添加对Memcached.ClientLibrary.dll的引用,即:using Memcached.ClientLibrary;
加入的代码为:
public partial class memcache : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string[] serverlist = new string[] { "192.168.140.9:11211" };
string poolName = "MemcacheIOPool";
SockIOPool pool = SockIOPool.GetInstance(poolName);
//设置连接池的初始容量,最小容量,最大容量,Socket 读取超时时间,Socket连接超时时间
pool.SetServers(serverlist);
pool.InitConnections = 1;
pool.MinConnections = 1;
pool.MaxConnections = 500;
pool.SocketConnectTimeout = 1000;
pool.SocketTimeout = 3000;
pool.MaintenanceSleep = 30;
pool.Failover = true;
pool.Nagle = false;
pool.Initialize();//容器初始化
//实例化一个客户端
MemcachedClient mc = new MemcachedClient();
mc.PoolName = poolName;
mc.EnableCompression = false;
string key = "user_info";//key值
object obj = new object();
if (mc.KeyExists(key)) //测试缓存中是否存在key的值
{
obj = mc.Get(key);
User user2 = (User)obj;
Response.Write("" + user2.Name + "," + user2.Pwd + "");
}
else
{
string conStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(conStr);
conn.Open();
string sql = "Select * From UserInfo Where id='US200906052323'";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader dr = cmd.ExecuteReader();
User user = new User();
while (dr.Read())
{
user.Name = dr["name"].ToString();
user.Pwd = dr["pwd"].ToString();
}
dr.Close();
conn.Close();
mc.Set(key, user, System.DateTime.Now.AddMinutes(2)); //存储数据到缓存服务器,这里将user这个对象缓存,key 是"user_info1"
Response.Write("姓名:" + user.Name + ",密码:" + user.Pwd + "");
}
}
}
[Serializable]
public class User
{
string id;
public string Id
{
get { return id; }
set { id = value; }
}
string name;
public string Name
{
get { return name; }
set { name = value; }
}
string pwd;
public string Pwd
{
get { return pwd; }
set { pwd = value; }
}
}
4.nomemcache.aspx是没有加缓存机制的直接连接数据库的页面。nomemcache.aspx.cs中的代码:
public partial class nomemcache : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string conStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(conStr);
conn.Open();
string sql = "Select * From UserInfo Where id='US20100623032641'";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader dr = cmd.ExecuteReader();
User user = new User();
while (dr.Read())
{
user.Name = dr["name"].ToString();
user.Pwd = dr["pwd"].ToString();
}
dr.Close();
conn.Close();
Response.Write("姓名:" + user.Name + ",密码:" + user.Pwd + "");
}
}
5.总结:memcache.aspx页面第一次请求数据库,后面找memcache.aspx页面,如果有就不取DB了。而nomemcache.aspx页面需要每次取DB.
以上内容根据:http://tech.it168.com/a2009/0907/675/000000675239.shtml而总结。