|
提醒:若参考此文,请先看完再操作!!
为了进一步提升网站的速度,准备将自己的DZX3.0开启memcache,本人小白,只好搜寻网络教程与资源,下面是实操总结:
当你听到memcache与memcached时把它当做是一个东东就好了,尽管它们存在区别,但是这并不影响你对它们的运用及理解。
“Memcache”它是一个自由和开放源代码、高性能、分配的内存对象缓存系统,即该系统名称为“Memcache”;
“Memcached”它是该系统的主程序文件,以守护程序方式运行于一个或多个服务器中(分布式),随时接受客户端的连接操作,使用共享内存存取数据;
“Memcachedb”它是新浪2007年的项目,在Memcached的基础上开发出来了,它与Memcache不同的是它提供了数据持久化存储。
一,下载memcache主程序
首先,我们需要下载一个memcached安装程序,memcached版本很多,开源的东西我们一定要找一个持续更新的版本,很简单,有团队在维护升级。
我选择的版本是:beitmemcached,项目地址:http://code.google.com/p/beitmemcached/ 注:此链结为windows下memcached文程序安装文件及示例。
图中的两个文件分别为:上面的是客户端调用示例项目文件、下面的文件是Memcached主程序安装文件。
二,安装memcache。
将上面下载的主程序解压到 e:\memcache\(目录可自定义)
然后 开始---运行-cmd (即cmd里) :
e:\memcached\memcached.exe -d install 安装程序
在输入
e:\memcached\memcached.exe -d start 设置(开机)启动。
以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。
如果你要卸载,执行下面的命令:
e:\memcached\memcached.exe -d stop
e:\memcached\memcached.exe -d uninstall
三,下载php_memcache.dll,PHP扩展项文件。
本人连自己的PHP版本是多少都不知道,经过询问主机商,学会了使用phpinfo来查看,即,将以上代码做成的php网页放到网站根目录访问后,就可以看到PHP相关信息了。
本人的PHP是 5.2.17,所以继续上网寻找对应版本的php_memcache.dll,通过DZ官方论坛找到好心人放出来的链接,下载到二个版本的php_memcache.dll:
TS版
NTS版
好了,又遇到不认识的了,TS与NTS,百度了一下,- TS:Thread Safe 线程安全, 执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。
- NTS:Non Thread Safe 非线程安全, 在执行时不进行线程(Thread)安全检查。
复制代码- 通过phpinfo(上面所介绍到的),查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,如果是:enabled,一般来说应该是ts版,否则是nts版。
复制代码 本人的phpinfo显示如图:
所以我下载了TS版来设置。
按教程把上面下载解压出来的TS版php_memcache.dll扔 x:/php/ext/文件夹里(即你主机安装的PHP目录),然后找到PHP的php.ini文件,也可以通过上面的phpinfo查找到具体地址:
在php.ini 里加入一行
extension=php_memcache.dll
好吧,问题又来了,我对php.ini也没接触过,继续搜索研究了一下,你会找到一列形式以“extension=php_memcache.dll”很相似的代码,在它们后面加上即可。
这个php.ini中,上面这些是PHP的扩展,前面带着“;”的表示没开启,不带的表示开启。
四,重启环境。
重新启动IIS或者apache,然后查看一下phpinfo,如果有memcache,就哦了!
五,测试
测试文件,下面代码做成PHP页访问:- <?php
- $mem = new Memcache;
- $mem->connect("127.0.0.1",11211);
- $mem->set("key","This is a test!", 0, 60);
- $val = $mem->get("key");
- echo '---------'.$val."----";
- phpinfo();
- ?>
-
复制代码 去 discuz x config\config_global.php设置相关:
// ----------------- CONFIG MEMORY ----------------- //
$_config['memory']['prefix'] = 'discuz_';
$_config['memory']['eaccelerator'] = 1; // 启动对 eaccelerator 的支持
$_config['memory']['xcache'] = 1; // 启动对 xcache 的支持
$_config['memory']['memcache']['server'] = '127.0.0.1'; // memcache 服务器地址
$_config['memory']['memcache']['port'] = 11211; // memcache 服务器端口
$_config['memory']['memcache']['pconnect'] = 1; // memcache 是否长久连接
$_config['memory']['memcache']['timeout'] = 1; // memcache 服务器连接超时
如果成功了的话,DZ后台可以看到:
不过,很可惜,按上面操作后,查看开机启动项与及资源管理器的进程显示,都已经有memcache,还重启了VPS,还是没有成功开启。准备重新装一遍试试。
今晚再次折腾,终于成功了。
一开始以为是memcached主程序有问题,所以继续去网上寻找资源,一般网站搜不到,最后在csdn.net上找到很多这类资源,以前就留意到这个网站了,因为很多资源要会员积分才能下载,所以没去注册,今晚逼不得已只好注册了,绑定手机快速弄到50积分,然后下载了一个比较多人评论的"memcached windows稳定版121" ,重启IIS,没有成功。
于是,我想问题应该还是出现在的扩展文件(php_memcache.dll)上吧,虽然上文中找到资源上确实写明是5.2,可能并不对罢,于是继续在csdn上直接搜索“ memcached php5.2.17”,没想到,确实有这个资源“ php 5.2.17 memcached扩展dll文件”。然后下载覆盖,重启IIS,于是终于成功了。
phpinfo里终于出现了:
当然按上面说的测试文件也正常返回:
This is a test!
至此,个人猜测,很有可能上文前头下载的那个DLL的扩展有问题,莫非我应该换那个nts版的试试,说不定是原作者对调了?再可能就是上面那个主程序的问题,不过感觉可能性比较小。总之现在用CSDN上的资源(上文有咖啡色文字)安装成功了,其他的版本或之前失败的原因就懒得去追究啦。虽然上面有下载链接,不过要注册还要积分,为了服务广大网友,本人把上面这二个安装成功的资源也放到这里吧:
memcached windows稳定版121 : 版本有点老,不过俺的VPS也比较老,所以暂时不打算更换,有时候老点的东西反而更好用。
php 5.2.17 memcached扩展dll文件: 这个PHP5.2.17确实适用。
----------------------------------
六,查看命中
1、memcache的运行状态可以方便的用stats命令显示。首先用telnet 127.0.0.1 11211这样的命令连接上memcache,然后直接输入stats就可以得到当前memcache的状态。
PS:@win7,如果看到[提示错误:'telnet' 不是内部或外部命令,也不是可运行的程序或批处理文件。],解决方法是依次打开“开始”→“控制面板”→“打开或关闭Windows功能”,在打开的窗口处,寻找并勾选“Telnet客户端”,然后点击“确定”。顺利安装后,再在运行下输入此命令就OK了。windows7带有telnet,只是默认没有安装而已。
2、输入stats命令查看基本信息。stats这些状态的说明如下:
pid:memcache服务器的进程ID
uptime:服务器已经运行的秒数
time:服务器当前的unix时间戳
version:memcache版本
pointer_size:当前操作系统的指针大小(32位系统一般是32bit)
rusage_user:进程的累计用户时间
rusage_system:进程的累计系统时间
curr_items:服务器当前存储的items数量
total_items:从服务器启动以后存储的items总数量
bytes:当前服务器存储items占用的字节数
curr_connections:当前打开着的连接数
total_connections:从服务器启动以后曾经打开过的连接数
connection_structures:服务器分配的连接构造数
cmd_get:get命令(获取)总请求次数
cmd_set:set命令(保存)总请求次数
get_hits:总命中次数
get_misses:总未命中次数
evictions:为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)
bytes_read:总读取字节数(请求字节数)
bytes_written:总发送字节数(结果字节数)
limit_maxbytes:分配给memcache的内存大小(字节)
threads:当前线程数
@缓存命中率 = get_hits/cmd_get * 100%
@get_misses的数字加上get_hits应该等于cmd_get
@total_items == cmd_set == get_misses,当可用最大内存用光时,memcached就会删掉一些内容,等式就会不成立
memcached/scripts/memcached-tool
[root@localhost scripts]# ./memcached-tool localhost:11211
# Item_Size Max_age Pages Count Full? Evicted Evict_Time OOM
1 80B 1065s 1 1 no 0 0 0
memcache的运行状态可以 方便的用stats命令显示。
首先用telnet 127.0.0.1 11211这样的命令连接上memcache,然后直接输入stats就可以得到当前memcache的状态。
这些状态的说 明如下:
pidmemcache服务器的进程IDuptime服 务器已经运行的秒数time服务器当前的unix时间戳versionmemcache 版本pointer_size当前操作系统的指针大小(32位系统一般是32bit)rusage_user进 程的累计用户时间rusage_system进程的累计系统时间curr_items服 务器当前存储的items数量total_items从服务器启动以后存储的items总数量bytes当 前服务器存储items占用的字节数curr_connections当前打开着的连接数total_connections从 服务器启动以后曾经打开过的连接数connection_structures服务器分配的连接 构造数cmd_getget命令(获取)总请求次数cmd_setset 命令(保存)总请求次数get_hits总命中次数get_misses总 未命中次数evictions为获取空闲内存而删除的items数(分配给memcache的空 间用满后需要删除旧的items来得到空间分配给新的items)bytes_read总读取字 节数(请求字节数)bytes_written总发送字节数(结果字节数)limit_maxbytes分 配给memcache的内存大小(字节)
threads当前线程数
结束进程
ps ef|grep mem*
kill -9 id
/usr/local/bin/memcached -d -m 512 -u www -l 192.168.200.13 -p 11211 -c 10000
3,以下内容为 memcache的命令说明:
-p 监听的端口
-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 显示帮助
-----------
本文主要内容来自网络:参考1 参考2 参考3 参考4
|
|