Windows 下启用 memcache 缓存所走的弯路

wordprss小白,纯记录学习实践的过程。

看了水煮鱼的博客(WordPress 如何启用 Memcached 内存缓存来提高网站速度 – WordPress 果酱 https://blog.wpjam.com/article/wordpress-memcached/),有提到使用 memcached 来缓存系统达到提升 wordpress 性能的效果。然后看到他的网站是页面生成时间不用 1ms,看看自己的 100-300 多 ms,差距不是一点点,而是不是在 2 个层级上的。抱着学习的态度,希望也能稍微加快点进度,以便提高网站的速度。

另外也一直存在 Waiting TTFB 时间过长的情况,虽然没有到 500ms,但也是无限的接近了。

于是开始启动,按照网上的教程操作起来。

首先就发现了有memcache 跟memcached 的区别,这点也是花了非常多的时间才弄明白,而网上大部分的资讯都近似于模棱两可的状态。经过了摸索,大概确定了如下情况:

1、memcache 跟 memcached 都是支持 PHP 的高性能的分布式内存对象缓存系统,支持 MySQL 数据库。

2、memcache 同时支持 Windows 系统跟 Linux 系统,但 memcached 仅在 Linux 下工作。【此处存疑,但找了好久还是没有发现有 Windows 下的 memcached,因此只能退而求其次使用 memcache 了】

3、memcache 跟 memcached 都需要一个服务端或者进程在后台运行,同时需要对应的 PHP 扩展生效。2 个扩展需要对应,交叉是无法发挥作用的。

4、memcache 跟 memcached 使用的默认端口类似,前者是 11211,后者是 11311。

5、memcache 需要运行的可执行文件就是 memcached.exe,Memcache 的服务在系统中加载为 Memcached,但实际又跟 Memcached 系统无关。这就是非常容易让人混淆的地方。误以为 memcached.exe 都在正常运行了,就一定是 memcached 扩展。

网上太多的文章混淆了二者的区别,例如 Memcached 教程 | 菜鸟教程 http://www.runoob.com/memcached/memcached-tutorial.html ,这里讲述介绍的是 Memcached,但在安装跟连接的环节,提供的方案完全是 Memcache,毫无吻合。

下面简述下按网上提供的教程在 Windows 下安装使用 Memcache 的过程,其中也有一些弯路,在此记录下来,便于下次直接过桥而不是摸着石头过河。

1、在网上下载 Memcache 的服务器端,即 exe 这个可执行文件。这个基本上到处都有,可以在刚才提到的网页中下载。目前分 1.4.4 跟 1.4.5 两个版本,前者支持加入服务自动启动,后者需要开启计划任务来保持开机运行。当前使用 1.4.4 版,使用服务加载比较简单、稳定。

2、在本机运行 Memcached.exe,并注册服务。将压缩包解压后得到 exe 文件,放到固定的位置后,以管理员权限开启 CMD 命令提示符,输入命令:memcached.exe -d install ,没有任何提示则已经成功。

如果提示:failed to install service or service already installed ,则检查是否使用了管理员权限。

3、检测 Memcache 服务运行情况,可以在任务管理器中看到 Memcached 服务已经开启。同时可以通过 telnet 方式连接本地的服务,查看运行的状态。

在命令提示符窗口输入 telnet 127.0.0.1 11211 ,正常情况下会一晃而过的连接中,即出现黑屏。回车会提示 ERROR,则表示已经连接成功。

输入 state 可以看到目前服务的状态,进程 ID,版本、命中、等状态。

4、找 PHP 的 Memcache 的扩展。话说在这里也是花了不少的时间,为什么呢?因为毕竟 Memcache 是一个非常老的系统了,已经有长期没有更新,目前在 PHP 的官方网站上可以找到的最新的已经是 2013 年的 3.0.8 版,其中的 DLL 文件仅支持 PHP 到 5.6,而服务器上运行的 PHP 已经在 7 以上了。网站并没有收录 7 及以后的 DLL 文件。网页是 http://pecl.php.net/package/memcache/3.0.8/windows

也算是找了好久,峰回路转,终于在 github 找到了,要不然怎么说是代码的仓库呢?具体的网址是 GitHub – nono303/PHP7-memcache-dll: PHP7-memcache-dll https://github.com/nono303/PHP7-memcache-dll,这里就分门别类做的非常的齐全。按照 PHP 的版本、系统的版本、是否安全线程都做了非常好的分类。方便后续的使用,花了点时间做了搬运,打包放到了百度云盘上(提取码 bw72)。

5、激活 PHP 扩展。既然已经找到了扩展 DLL 文件,那么按指引操作吧。先把 php-7.1.x_memcache.dll 复制到 PHP 的 ext 文件夹下面,然后再到 PHP.ini 文件中加上:extension=php-7.1.x_memcache.dll,大约在 900 行的样子有一堆的 extension= 。保存后重启 Apache ,打开一段验证代码的文件。代码如下,另存为 PHP 文件即可。

phpinfo();


?>



$mem = new Memcache;


$mem->connect(‘127.0.0.1’,11211)or die(“连接失败”);


$mem->set(‘key’, ‘This is a test!’, 0, 60);


$val = $mem->get(‘key’);


echo $val;


echo “
version:”.$mem->getVersion();

?>

然后不出意外的提示:Fatal error: Uncaught Error: Class ‘Memcache’ not found in【文件路径】.php:6 Stack trace: #0 {main} thrown in 【文件路径】.php on line 6

于是又到网上找答案,这个倒是简单,都提示是因为 dll 的版本不对问题。Dll 的版本主要涉及到三个方面,PHP 的编译版本(VC14.15.16)、PHP 版本(7.0,7.1,7.2),是否安全线程(NTS、TS)、操作系统版本(X86、X64)。前三个都可以通过 phpinfo();的这个函数得到。Compiler  MSVC14 (Visual C++ 2015),Thread Safety    disabled,PHP Version 7.1.15 ,选 VC14,NTS,7.1.x 这个 dll 文件就行了,操作系统服务器版的肯定是 X64 的 64 位系统了,肯定没有人在服务器用 32 位的系统了吧。然后怎么样,怎么样都是不对,总是返回这样一个结果,简直让人崩溃了。

网上给出的答案,都指向了版本的问题,那么版本的问题是什么?4 个选项,都选择对了,为什么还是提示出错呢?
也算是灵光一闪,再继续查看 phpinfo()的页面时候,突然看到了显示的架构是 x86!!

这?完全颠覆了一直的认知,既然如此,那么换 x86 的,不用 x64 的。替换,重启 Apache,刷新页面,居然成功了!

这为什么呢?真百思不得其解。

启用了之后在刷新看看有没有效果。发现还是依然如故,查询时长 0.178s,waiting ttfb 时间还是 500ms 左右。看来问题并非使用缓存来解决了。

觉得可能是服务器虚拟主机的原因,所以是 x86 架构的。后来在本地电脑上也进行了测试,发现架构依然是 x86,明明系统是 64 位的系统。看来这里的可能是另外一种标准了,有待后续来解决了。

人已赞赏
网站系统

WordPress 即将发布 5.2 版本

2019-4-30 8:33:27

网站系统

WordPress 5.2 “Jaco”正式版发布

2019-5-8 18:31:58

5 条回复 A文章作者 M管理员
  1. 其实,现在我倒是不建议大家随意的使用Memcached来加速,这个加速的效果其实对于前段来说并没有想象的那么大!

  2. 相信明月大佬的!

  3. 缓存插件的使用要看情况的,不是谁都可以用的!

  4. 缓存插件和扩展一般都是救急的,并不建议长期使用,除非服务器上有比较安全的防御策略和及时的漏洞修补!
    否则就是招蜂引蝶!

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索