初识 Memcached【一】
2013-04-18 16:19 音乐让我说 阅读(592) 评论(0) 编辑 收藏 举报关于 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 中撰写测试代码,比如我的是:
<%@ 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>
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 客户端介绍
可参考地址:
http://www.cnblogs.com/dudu/p/performance-monitor-enyim-memcached.html
http://zhoufoxcn.blog.51cto.com/792419/528212/
可参考网址:
memcached罢工引发的血案-博客园评论超时问题处理过程
Discuz!NT中集成Memcached分布式缓存 - daizj - 戴振军 - 博客园
谢谢浏览!
作者:音乐让我说(音乐让我说 - 博客园)
出处:http://music.cnblogs.com/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。