KakapoWP KakapoWP
帮助中心/Performance/使用 Redis 或 Memcached 配置对象缓存

使用 Redis 或 Memcached 配置对象缓存

适用于:Kakapo Performance· 5 分钟阅读

首先:您的 PHP 能做什么?

对象缓存通过 Redis 或 Memcached 工作,为此 PHP 需要相应的扩展。Kakapo 会在运行时检查这一点:它查看 Redis 或 Memcached 类是否真的已经加载。仅仅有一个正在运行的 Redis 服务还不够:没有扩展,PHP 就无法与它通信。缺少扩展时,选择列表中的对应条目会被禁用,旁边写明缺的是哪个软件包(例如“pecl install redis”或发行版软件包 php<version>-redis,装完后重启 PHP)。如果 Kakapo 只找到不带 d 的旧扩展“memcache”,它会明确说出来——但不会使用它,因为它缺少批量查询 getMulti 和二进制传输。如果两个扩展都没有,您在这里就无法继续;这是您主机商的事,而不是插件的问题。

填写连接信息

主机通常是 127.0.0.1。像“http://”这样的协议前缀会被拒绝,因为这里只填主机名或 IP。使用 Unix Socket 时,请填入它的路径(例如 /var/run/redis/redis.sock)并把端口设为 0。端口在 Redis 上通常是 6379,在 Memcached 上是 11211;允许 0 到 65535。切换后端时,只要原来的端口还是默认值,Kakapo 就会自动带上新的默认端口。数据库编号(0 到 255)只有 Redis 才有,它把本站与同一台服务器上的其他应用分开。只有当您的 Redis 使用 ACL(Redis 6 起)或 Memcached 要求 SASL 时,才需要填写用户和密码。键前缀把同一台缓存服务器上的两个 WordPress 安装彼此分开——该字段留空时,会从您的站点地址派生出一个前缀(kwpp 加八个字符)。允许使用字母、数字以及 _ . : -,最多 40 个字符。每个条目的有效期默认为 86400 秒;允许 0 到 2592000。0 表示“永不过期”——这对清空有影响,见下文。

在写入任何内容之前先测试连接

“测试连接”按钮会真正建立一次连接,写入一个测试键(有效期 30 秒),再把它读回来,逐字符与写入的值比对,然后把它删除。只有当值原封不动地返回时,测试才算通过——仅仅“connect() 没有返回 false”太单薄了:Redis 可能已连接却仍是只读的(副本),Memcached 也会在还没有内存时就接受连接。整个流程的时间限制为一秒。测量到的时长和几项服务器信息(版本、已用内存、条目数量、运行时间)随后会显示在卡片里。测试失败时,那里会写明具体原因:无法访问、登录被拒绝、无法选择数据库。该测试只在后台或通过 Cron 运行——绝不会在访客的页面构建过程中建立测试连接。

写入 Drop-in——以及此时会发生什么

对象缓存位于文件 wp-content/object-cache.php 中。WordPress 会非常早地加载它,早于任何插件。写入之前,Kakapo 会先给出预览:将创建哪个文件、其中写着哪些凭据、之后缓存服务器里会存放什么,以及回退的路径是什么。如果有东西挡在前面——缺少扩展、该位置上有别的 Drop-in、wp-content 不可写、缺少模板——按钮就会被禁用,原因写在它上方;写入时服务器端会再做一遍这项检查。确认时请输入 INSTALLIEREN。写入时会先写到一个相邻文件,由 PHP 自己检查语法(前提是允许 exec() 并且能找到 PHP 可执行文件),之后才重命名到它的位置并设为 0644。绕这一圈的原因:一个写了一半的 object-cache.php 会成为先于所有插件的错误——站点会变成白屏,连您本想用来撤销它的管理页面也一样。此外,每次写入都会获得自己的一个代次,以免移除之前留下的条目突然又重新生效(否则旧的博客名称会回来,已登录的管理员也会被踢出会话)。如果该位置上已经有别的 Drop-in,它既不会被覆盖,也不会被删除。

运行中:查看数字、清空、移除

“运行中”下面显示的是这一次页面访问的数字:建立连接花了多少毫秒、命中与未命中、其中有多少来自缓存服务器、向它发出了多少次请求以及这些请求耗时多久。这里刻意没有跨时间的统计——记录它在每次访问上的开销,会超过它所测量的东西。“清空对象缓存”会更换键盐值,而不是发送 FLUSHDB 或 flush_all:这样就没有旧键还指向有效条目,而同一台服务器上其他应用的数据保持不变。那些成了孤儿的条目会按设定的有效期过期——如果设为 0,它们永不过期,会一直堆积,直到 Redis 或 Memcached 自己清理。您更改设置后,仍以文件中的内容为准;Kakapo 会报告这一偏差并提供“更新 Drop-in”。“移除 Drop-in”只删除一个文件,不会留下数据库行或计划任务;停用插件时它同样会消失。如果您不想让密码以明文写在文件里,可以在 wp-config.php 中把它定义为 KWPP_OC_AUTH 并让该字段留空——常量优先。主机、端口、用户、数据库和前缀也可以这样做(KWPP_OC_HOST、KWPP_OC_PORT、KWPP_OC_USER、KWPP_OC_DB、KWPP_OC_PREFIX);这样更换服务器时就不必重新写入 Drop-in。

这篇文章对您有帮助吗?