蓝忧无泪 发表于 2013-8-28 15:15:24

Windows下Memcache的安装方法

提醒:若参考此文,请先看完再操作!!


为了进一步提升网站的速度,准备将自己的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
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
# ./memcached-tool localhost:11211
#Item_SizeMax_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



蓝忧无泪 发表于 2013-9-9 22:30:57

对了,开启MEM可能会对贴子列表页的缓存造成影响,例如刚发表的贴子要过好一会才会被提前到列表前头与及出现最后发表用户名,操作置顶,精华,高亮等可能会不成功....

解决方法是在内存优化里,去掉列表页前面的勾。其他类似问题解决方法同理。




涛总 发表于 2016-9-12 12:32:23

下载地址呢,大哥
页: [1]
查看完整版本: Windows下Memcache的安装方法