MemCached说明.docx
- 文档编号:4726562
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:39
- 大小:41.35KB
MemCached说明.docx
《MemCached说明.docx》由会员分享,可在线阅读,更多相关《MemCached说明.docx(39页珍藏版)》请在冰豆网上搜索。
MemCached说明
一、安装Memcached及Memcached配置和状态查询
要想使用Memcached做缓存首先需要安装Memcached服务,安装方法如下:
1.下载Memcached:
现在的最新版本是1.2.6.注意下载正确的版本,windows服务的话下载win32binary。
2.解压之后放在硬盘的目录下,如:
D:
\memcached.然后在运行中输入cmd进入命令行,进入到Memcached.exe所在的目录,例如:
D:
\memcached,然后输入:
Memcached–dinstall,即可完成安装。
Memcached还有其他的一些常用的命令如下:
-p监听的端口
-l连接的IP地址,默认是本机
-dstart启动memcached服务
-drestart重起memcached服务
-dstop|shutdown关闭正在运行的memcached服务
-dinstall安装memcached服务
-duninstall卸载memcached服务
-u以的身份运行(仅在以root运行的时候有效)
-m最大内存使用,单位MB。
默认64MB
-M内存耗尽时返回错误,而不是删除项
-c最大同时连接数,默认是1024
-f块大小增长因子,默认是1.25
-n最小分配空间,key+value+flags默认是48
-h显示帮助
按照上面的安装步骤安装之后,使用memcached–m200来调整最大内存占用之后会发现没有起作用,总是默认的64MB的内存,在网上搜了一下,原因是注册表中并没有写入信息,可以这样来修改。
1.memcached–dshutdown首先关闭memcached服务。
2.进入注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcachedServer,在其中有一个ImagePath项,值为"d:
\memcached\memcached.exe"-drunservice,在后面加上-l127.0.0.1-m3000-c2048。
3.memcached–dstart启动memcached服务,这样就将memcached的最大内存修改为了3000MB。
对Memcached缓存服务的状态查询,可以先telnet连接上服务:
telnet127.0.0.111211,然后使用stats命令查看缓存服务的状态,会返回如下的数据:
time:
1255537291 服务器当前的unix时间戳
total_items:
54 从服务器启动以后存储的items总数量
connection_structures:
19 服务器分配的连接构造数
version:
1.2.6 memcache版本
limit_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位系统一般是32bit)
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数量
二、在DiscuzNT3.0中配置Memcached服务
在DiscuzNT3.0中配置Memcached服务较为简单,找到论坛根目录下的config目录,找到Memcached.config,打开,进行如下配置:
xmlversion="1.0"?
>
xsi="http: //www.w3.org/2001/XMLSchema-instance"xmlns: xsd="http: //www.w3.org/2001/XMLSchema"> (1) (2) (1)处为"true”的时候表示DiscuzNT打开Memcached缓存功能,为"false”的时候表示关闭Memcached缓存功能。 (2)处填写Memcached服务器的IP地址+端口,例如: 127.0.0.1: 11211 三、二次开发监控Memcached状态 DiscuzNT的一个好处就是开源的,并且我们能够再上面很灵活的进行二次开发,这里,我们就以监控Memcached状态为例来做一个二次开发。 具体的步骤是: 1.下载Memcached的.Net的开发包,下载地址是: 2.在visualstudio2005或者2008中建立一个类库,例如命名为: MyBBS.BBS.Plugin.MemcachedStats,然后在项目点击右键,选择属性,将默认命名空间修改为: Discuz.Web,如图: 3.将Memcached的.Net开发包解压,将将Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll等放到bin目录,并且在项目中引用Memcached.ClientLibrary.dll. 4.在项目中引用Discuz.Forum. 5.在项目中增加类,命名为memcachedstats.cs.记得最好是小写,继承自Discuz.Forum.PageBase。 然后在类中overrideshowpage()函数,我们就可以在这里来写代码了,如下: usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.Data; usingSystem.Collections; usingM=Memcached.ClientLibrary; namespaceDiscuz.Web { publicclassmemcachedstats: Discuz.Forum.PageBase { publicstringMemcachedStatsOutput=string.Empty; protectedoverridevoidShowPage() { base.ShowPage(); string[]servers={"此处填写Memcachedf服务IP+端口"}; M.SockIOPoolpool=M.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(); this.pagetitle="MemcachedStats"; M.MemcachedClientmc=newMemcached.ClientLibrary.MemcachedClient(); StringBuildersb=newStringBuilder(); Hashtableht=mc.Stats(); sb.AppendLine("MemcachedStats: sb.AppendLine("_______________________________________ foreach(DictionaryEntrydeinht) { Hashtableinfo=(Hashtable)de.Value; foreach(DictionaryEntryde2ininfo) { sb.AppendLine(de2.Key.ToString()+": "+de2.Value.ToString()+" } } MemcachedStatsOutput=sb.ToString(); } } } 这样我们就将代码完成了,我们将Memcached服务的状态信息保存到了MemcachedStatsOutput这个字段中了,那么我们怎么在页面上显示出来呢? 在进行下一步之前,编译输出MyBBS.BBS.Plugin.MemcachedStats.dll然后上传到论坛根目录的bin目录下。 6.在论坛根目录下面的templete\default\中新建memcachedstats.htm,写入下面的代码: <%template_header%>
");
");
");
{MemcachedStatsOutput}