WordPress 中使用 Memcached 常见问题:如何正确安装?多个站点如何同时使用?

2022-07-2809:13:16网站建设与开发Comments1,686 views字数 2179阅读模式

如何正确安装 Memcached?

首先需要明确一点,必须同时安装 Memcached 服务端和其 PHP 扩展文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

1. 首先服务器需要安装 Memcached 服务端,然后 PHP 需要安装上 Memcached 的扩展文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

2. WPJAM Basic 插件已经集成 Memcached 的功能,将 wpjam-basic/template/ 目录下的 object-cache.php 文件复制到 wp-content 目录下,注意不是 wp-content/plugins/文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

3. WordPress 会自动检查在 wp-content 目录下是否有 object-cache.php 文件,如果有,直接调用它作为 WordPress 对象缓存机制。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

使用 Memcached 的哪个 PHP 扩展?

Memcached 有 两个 PHP 扩展:“PHP Memcache 扩展” 和 “PHP Memcached 扩展”,两者仅仅相差一个字母 D,这是我们搞混的地方。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

PHP Memcache 扩展用 PHP 实现的,支持面向对象和面向过程两种接口,2004年就实现了,是老客户端,而且功能少,属性也可设置的少。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

PHP Memcached 扩展基于 libmemcached 开发的,使用 libmemcached 库提供的 API 与 Memcached 服务进行交互,只支持面向对象的接口,2009年才实现,Memcached 扩展功能更加完善,支持的函数更多,比如支持批量操作,现在一般建议使用 Memcached 扩展文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

WPJAM Basic 的  object-cache.php  是基于 PHP 的 Memcached 扩展实现的,所以一定要使用 PHP Memcached 扩展,不要搞错了,我们可以同样在「系统信息」的 PHP 扩展中看到:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

WordPress 中使用 Memcached 常见问题:如何正确安装?多个站点如何同时使用?

如何判断 Memcached 安装成功?

如果成功安装,WPJAM Basic 会自动在 WordPress 后台「WPJAM」菜单下的的「系统信息」 子菜单中看到 Memcached 的信息:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

WordPress 中使用 Memcached 常见问题:如何正确安装?多个站点如何同时使用?

再次重复一下,只有这个界面显示正常才是安装成功,如果显示任何异常,那就是可能 Memcached 服务端或者其 PHP 扩展安装错了,不是程序出错,不用来给我报错,找你的服务器管理员帮你检查 Memcached 安装是否错误。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

同台服务器多个站点如何同时使用?

在同台服务器上的多个 WordPress 站点如果同时启用了 Memcached,可能会出现这样的问题:访问一个网站会跳转到另外一个网站,数据会串了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

这是怎么回事呢?这是因为 object-cache.php 是使用 WordPress 的表前缀($table_prefix)来区分不同站点在内存中的缓存的文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

如果你在同个服务器多个 WordPress 网站的表前缀都相同,都是默认的 wp_,那么 object-cache.php 就无法区分是哪个站点了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

有两个解决方法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

1. 修改表前缀,让不同的 WordPress 博客使用不同的表前缀,我开发了一个 WordPress 数据库表前缀修改器(https://tool.wpjam.com/change-prefix/),一键生成修改数据库表前缀所需的SQL,让你在 WordPress 修改表前缀之后能够更加方便全站修改。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

2. 如果修改表前缀不方便,我还提供了 WP_CACHE_KEY_SALT 这个缓存 key 盐值的常量,你只需要在不同站点的 wp-config.php 文件定义不同的 WP_CACHE_KEY_SALT 值即可文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

比如两个站点分别定义为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

define('WP_CACHE_KEY_SALT', 'site1');
define('WP_CACHE_KEY_SALT', 'site2');

如果设置了还不行,可能你的 object-cache.php 不是最新版,那就下载一下最新版的 WPJAM Basic 插件,然后将 wpjam-basic/template/ 目录下的 object-cache.php 文件复制到 wp-content 目录下。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

缓存过期时间如何设置超过30天?

根据 WordPress 的对象缓存提供的缓存函数的用法,使用 wp_cache_set 函数把缓存过期时间设置为 60×60×24×365 就是一年,然后写入缓存,结果返回 true,说明已经正确地存储到 Memcached 中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

但是在使用函数 wp_cache_get 去获取的时候,总是返回 null,最后查手册才发现,Memcahced 设置过期时间要注意特殊情况文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

  • 缓存过期时间是一个 Unix 时间戳,也可以是一个从现在算起的以秒为单位的数字
  • 那么怎么判断是 Unix 时间戳还是一个从现在算起的以秒为单位的数字呢?
  • 小于 60×60×24×30(30天时间的秒数),就算是从现在算起的以秒为单位的数字。
  • 如果大于 60×60×24×30,则会将其作为一个真实的Unix时间戳来处理而不是自当前时间的偏移。
  • 如果缓存过期时间被设置为0(默认),此元素永不过期(但是可能会因为 Memcached 分配的内存用完,为了给其他新的元素分配空间而被删除)。

所以如果真的要设置缓存过期时间为一年后,其值应该设置为: time()+60×60×24×365文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

而不是 60×60×24×365,这是北京时间 1971-01-01 08:00:00 的时间戳,一个过去的时间,获取的时候已经过期了,返回自然是 null,不存在了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/26148.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/cms/26148.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定