suncool 发表于 2015-9-1 10:10:09

初识 Memcached【一】

  关于 Memcached 大家都已经比较熟悉了,来自百度百科介绍如下:

  Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

  今天研究了一下,也算是简单的测试通过了,下面介绍自己的步骤,有什么不到位的,或者有误的,还请大牛即使指正,谢谢!
  1. 首先去 Memcached 的官网下载最新的源代码,地址:http://memcached.org/,目前最新的版本是:Memcached 1.4.15。
  2. 用C++或者tc编译源代码,然后生成exe文件。我这里有编译好的文件,不过版本是 1.2.5,点击这里下载。
  3. 解压缩文件到 c:\memcached
  4. 命令行输入 'c:\memcached\memcached.exe -d install'
  5. 命令行输入 'c:\memcached\memcached.exe -d start' ,该命令启动 memcached ,默认监听端口为 11211,通过 memcached.exe -h 可以查看其帮助。

  6. 下载 memcached .net client lib,下载地址:http://sourceforge.net/projects/memcacheddotnet/,我下载的版本是:memcacheddotnet_clientlib-1.1.5
  7. 解压后,就可以看到源代码了,用 VS 打开,编译后在 Release 文件夹下把下面的 DLL 文件 Copy 出来。

  8. 重新新建一个测试项目,比如 Web 应用程序。添加对上面那 4 个 DLL 的引用。

  9. 在 index.aspx 和 index.aspx.cs 中撰写测试代码,比如我的是:


View Code


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="DearBruce.MemcachedTest.WebApp.index" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">
div{ margin: 20px;}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="btnInitSockIOPool" runat="server" Text="初始化池、Socket" OnClick="btnInitSockIOPool_Click" />
</div>
<div>
<asp:TextBox ID="txtUserInput" runat="server" Width="300px" />
<asp:Button ID="btnSetValueToMemcached" runat="server" Text="设置值到 Memcached" OnClick="btnSetValueToMemcached_Click" />
</div>
<div>
<asp:Button ID="btnGetValueFromMemcached" runat="server" Text="从 Memcached 得到值" OnClick="btnGetValueFromMemcached_Click" />
</div>
<div>
<asp:Button ID="btnDeleteValueFromMemcached" runat="server" Text="从 Memcached 移除值" OnClick="btnDeleteValueFromMemcached_Click" />
</div>
<div>
<asp:Button ID="btnClosePool" runat="server" Text="关闭池、Socket" OnClick="btnClosePool_Click" />
</div>
<div>
<asp:Literal ID="ltMessage" runat="server" ViewStateMode="Disabled" />
</div>
</form>
</body>
</html>

View Code


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Memcached.ClientLibrary;
namespace DearBruce.MemcachedTest.WebApp
{
public partial class index : System.Web.UI.Page
{
private const string MemcachedKey = "TestKey";
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
}
}
protected void InitSockIOPool()
{
string[] serverlist = { "127.0.0.1:11211" };
//初始化池
SockIOPool pool = SockIOPool.GetInstance();
pool.SetServers(serverlist);
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();
}
protected void btnSetValueToMemcached_Click(object sender, EventArgs e)
{
string txtUserInput = this.txtUserInput.Text;
if (string.IsNullOrEmpty(txtUserInput))
{
ShowMessage("请输入要设置的值!");
return;
}
// 获得客户端实例
MemcachedClient mc = new MemcachedClient();
mc.EnableCompression = false;

mc.Set(MemcachedKey, txtUserInput);
ShowMessage("设置成功!");
}
protected void btnGetValueFromMemcached_Click(object sender, EventArgs e)
{
MemcachedClient mc = new MemcachedClient();
if (mc.KeyExists(MemcachedKey))
{
ShowMessage("您输入的值为:" + mc.Get(MemcachedKey).ToString());
}
else
{
ShowMessage(string.Format("Memcached 中不存在键为 \"{0}\" 的项!", MemcachedKey));
}
}
protected void btnDeleteValueFromMemcached_Click(object sender, EventArgs e)
{
MemcachedClient mc = new MemcachedClient();
mc.Delete(MemcachedKey);//移除缓存中key为test的项目

}
protected void btnInitSockIOPool_Click(object sender, EventArgs e)
{
InitSockIOPool();
}
protected void btnClosePool_Click(object sender, EventArgs e)
{
SockIOPool.GetInstance().Shutdown();//关闭池, 关闭sockets
      }
protected void ShowMessage(string message)
{
this.ltMessage.Text += message;
}
}
}
  
  10. 运行,测试,成功!

  其它 .NET 客户端介绍
  EnyimMemcached
  可参考地址:
  http://www.cnblogs.com/dudu/p/performance-monitor-enyim-memcached.html
  http://zhoufoxcn.blog.iyunv.com/792419/528212/
  
  可参考网址:
  memcached罢工引发的血案-博客园评论超时问题处理过程
  memcached - Google Code

  Discuz!NT中集成Memcached分布式缓存 - daizj - 戴振军 - 博客园
  谢谢浏览!
页: [1]
查看完整版本: 初识 Memcached【一】