1、MemCached说明一、安装Memcached及Memcached配置和状态查询 要想使用Memcached做缓存首先需要安装Memcached服务,安装方法如下: 1. 下载Memcached: 现在的最新版本是1.2.6.注意下载正确的版本,windows 服务的话下载win32 binary。 2.解压之后放在硬盘的目录下,如:D:memcached. 然后在运行中输入cmd进入命令行,进入到Memcached.exe 所在的目录,例如:D:memcached,然后输入:Memcached d install,即可完成安装。 Memcached还有其他的一些常用的命令如下: -p 监听
2、的端口 -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起memcached服务 -d stop|shutdown 关闭正在运行的memcached服务 -d install 安装memcached服务 -d uninstall 卸载memcached服务 -u 以的身份运行 (仅在以root运行的时候有效) -m 最大内存使用,单位MB。默认64MB -M 内存耗尽时返回错误,而不是删除项 -c 最大同时连接数,默认是1024 -f 块大小增长因子,默认是1.25 -n 最小分配空间,key+value+flags默认是48 -h 显
3、示帮助 按照上面的安装步骤安装之后,使用memcached m 200来调整最大内存占用之后会发现没有起作用,总是默认的64MB的内存,在网上搜了一下,原因是注册表中并没有写入信息,可以这样来修改。 1. memcached d shutdown 首先关闭memcached服务。 2.进入注册表,找到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesmemcached Server, 在其中有一个ImagePath项,值为d:memcachedmemcached.exe -d runservice,在后面加上-l 127.0.0.1 -m 300
4、0 -c 2048。 3.memcached d start 启动memcached服务,这样就将memcached的最大内存修改为了3000MB。 对Memcached缓存服务的状态查询,可以先telnet连接上服务:telnet 127.0.0.1 11211 ,然后使用 stats命令查看缓存服务的状态,会返回如下的数据: time: 1255537291 服务器当前的unix时间戳 total_items: 54 从服务器启动以后存储的items总数量 connection_structures: 19 服务器分配的连接构造数 version: 1.2.6 memcache版本 lim
5、it_maxbytes: 67108864 分配给memcache的内存大小(字节) cmd_get: 1645 get命令(获取)总请求次数 evictions: 0 为获取空闲内存而删除的items数(分配给memcache的空间用满后需 要删除旧的items来得到空间分配给新的items) total_connections: 19 从服务器启动以后曾经打开过的连接数 bytes: 248723 当前服务器存储items占用的字节数 threads: 1 当前线程数 get_misses: 82 总未命中次数 pointer_size: 32 当前操作系统的指针大小(32位系统一般是32
6、bit) bytes_read: 490982 总读取字节数(请求字节数) uptime: 161 服务器已经运行的秒数 curr_connections: 18 当前打开着的连接数 pid: 2816 memcache服务器的进程ID bytes_written: 16517259 总发送字节数(结果字节数) get_hits: 1563 总命中次数 cmd_set: 54 set命令(保存)总请求次数 curr_items: 28 服务器当前存储的items数量 二、在Discuz NT 3.0中配置Memcached服务 在Discuz NT 3.0中配置Memcached服务较为简单,
7、找到论坛根目录下的config目录,找到Memcached.config,打开,进行如下配置: (1) (2) DiscuzNT_MemCache 3 3 5 1000 3000 30 true true (1)处为true”的时候表示Discuz NT打开Memcached缓存功能,为false”的时候表示关闭Memcached缓存功能。 (2)处填写Memcached服务器的IP地址+端口,例如:127.0.0.1:11211 三、二次开发监控Memcached状态 Discuz NT的一个好处就是开源的,并且我们能够再上面很灵活的进行二次开发,这里,我们就以监控Memcached状态为例
8、来做一个二次开发。具体的步骤是: 1.下载Memcached的.Net的开发包,下载地址是: 2.在visual studio 2005或者2008中建立一个类库,例如命名为:MyBBS.BBS.Plugin.MemcachedStats,然后在项目点击右键,选择属性,将默认命名空间修改为:Discuz.Web,如图: 3.将Memcached的.Net开发包解压,将将 Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll 等放到bin目录,并且在项目中引用Memcached.Client
9、Library.dll. 4.在项目中引用Discuz.Forum. 5.在项目中增加类,命名为memcachedstats.cs.记得最好是小写,继承自Discuz.Forum.PageBase。然后在类中override showpage()函数,我们就可以在这里来写代码了,如下: using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Collections; using M=Memcached.ClientLibrary; namespace D
10、iscuz.Web public class memcachedstats:Discuz.Forum.PageBase public string MemcachedStatsOutput = string.Empty; protected override void ShowPage() base.ShowPage(); string servers = 此处填写Memcachedf服务IP+端口 ; M.SockIOPool pool = M.SockIOPool.GetInstance(); pool.SetServers(servers); pool.InitConnections =
11、 3; pool.MinConnections = 3; pool.MaxConnections = 5; pool.SocketConnectTimeout = 1000; pool.SocketTimeout = 3000; pool.MaintenanceSleep = 30; pool.Failover = true; pool.Nagle = false; pool.Initialize(); this.pagetitle = MemcachedStats; M.MemcachedClient mc = new Memcached.ClientLibrary.MemcachedCli
12、ent(); StringBuilder sb = new StringBuilder(); Hashtable ht = mc.Stats(); sb.AppendLine(Memcached Stats:); sb.AppendLine(_); foreach (DictionaryEntry de in ht) Hashtable info = (Hashtable)de.Value; foreach (DictionaryEntry de2 in info) sb.AppendLine(de2.Key.ToString() + : + d
13、e2.Value.ToString() + ); MemcachedStatsOutput = sb.ToString(); 这样我们就将代码完成了,我们将Memcached服务的状态信息保存到了MemcachedStatsOutput 这个字段中了,那么我们怎么在页面上显示出来呢?在进行下一步之前,编译输出MyBBS.BBS.Plugin.MemcachedStats.dll然 后上传到论坛根目录的bin目录下。 6.在论坛根目录下面的templetedefault中新建memcachedstats.htm,写入下面的代码: config.forumtitle » Memcach
14、ed Stats Memcached Stats MemcachedStatsOutput 这里我们重点注意红色的部分,我们就是在这里来把我们上面的类库里面的MemcachedStatsOutput字段在这里输出的。 7.进入论坛后台管理系统,点击“界面风格”“模板管理”“default”,这时我们就可以看到出现了memcachedstats这个模板了,勾中前面的复选框,然后选择“按选择的模板文件生成页面”。 8.上面的工作完成之后,我们在浏览器中输入:您的论坛地址memcachedstats.aspx,就可以看到统计的Memcached服务的信息了,如图: 四、结束语与参考信息 怎么样,还是
15、很简单的吧,当然这里仅仅是做了最基本的开发了,不过相信这些弄清楚了,其它的开发就不是很复杂了,大家也都可以开发出自己更多丰富多彩的功能了。 下面列出的是其他的一些参考资料,希望对大家有帮助: Discuz NT 界面模板的基本语法: Memcached的安装: 网友编写的用php代码展示Memcached状态的代码: 0 Comments memcached完全剖析1. memcached的基础时间:2009-06-14 11:00:02来源:网络 作者:未知 点击:177次 我是mixi株式会社开发部系统运营组的长野。日常负责程序的运营。从今天开始,将分几次针对最近在Web应用的可扩展性领域
16、的热门话题memcached,与我公司开发部研究开发组的前坂一起,说明其内部结构和使用。 我是mixi株式会社开发部系统运营组的长野。日常负责程序的运营。从今天开始,将分几次针对最近在Web应用的可扩展性领域的热门话题memcached,与我公司开发部研究开发组的前坂一起,说明其内部结构和使用。 memcached是什么? memcached的特征 协议简单 基于libevent的事件处理 内置内存存储方式 memcached不互相通信的分布式 安装memcached memcached的安装 memcached的启动 用客户端连接 使用Cache:Memcached 使用Cache:Memc
17、ached连接memcached 保存数据 获取数据 删除数据 增一和减一操作 总结 memcached是什么? memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web 应用扩展性的重要因素。 许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。 这时就该memcached大显身
18、手了。memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。 图1 一般情况下memcached的用途 memcached的特征 memcached作为高速运行的分布式缓存服务器,具有以下的特点。 协议简单 基于libevent的事件处理 内置内存存储方式 memcached不互相通信的分布式 协议简单 memcached的服务器客户端通信并不使用复杂的XML等格式,而使用简单的基于文本行的协议。因此,通过telnet 也能在memcached上保存数据、取得数据。下面是例子。 $ telnet
19、 localhost 11211 Trying 127.0.0.1. Connected to localhost.localdomain (127.0.0.1). Escape character is . set foo 0 0 3 (保存命令) bar (数据) STORED (结果) get foo (取得命令) VALUE foo 0 3 (数据) bar (数据)协议文档位于memcached的源代码内,也可以参考以下的URL。 基于libevent的事件处理 libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使
20、对服务器的连接 数增加,也能发挥O(1)的性能。 memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。关于事件处理这里就不再详细介 绍,可以参考Dan Kegel的The C10K Problem。 libevent:http:/www.monkey.org/provos/libevent/ The C10K Problem: 内置内存存储方式 为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启 memcached、重启操作系统会导致全部数据消失。另外,内容容
21、量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。 memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。关于内存存储的详细信息,本连载的第二讲以后前坂会进行介绍,请届 时参考。 memcached不互相通信的分布式 memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢?这完全取决于客户端的实现。本连载也将介绍memcached的分布式。 图2 memcached的分布式 接下来简单介绍一下memcached的使用方法。 安装memcached memcached的安装比较简单,这
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1