安装次数: 11 170

依赖项: 0

建议者: 0

安全: 0

星标: 226

关注者: 55

分支: 69

开放问题: 29

类型:wordpress-plugin

1.4.4 2023-11-27 19:29 UTC

README

Actively Maintained

贡献者: getpantheon, danielbachhuber, mboynes, Outlandish Josh jspellman jazzs3quence
标签: cache, plugin, redis
最低要求 3.0.1
测试到 6.4.1
稳定版本: 1.4.5-dev
许可: GPLv2 或更高版本
许可URI: https://gnu.ac.cn/licenses/gpl-2.0.html

使用Redis作为高性能内存存储后端,为WP对象缓存提供支持。

描述

CircleCI

对于关注高流量、登录用户速度或动态页面加载的网站,一个高速且持久化的对象缓存是必不可少的。您还需要能够在应用程序的多个实例之间扩展的东西,因此使用本地文件缓存或APC是不合适的。

Redis是一个很好的解决方案,我们将其打包在Pantheon平台上。这是我们用于与缓存集成的插件,但如果你有Redis,你可以在任何自托管WordPress网站上使用它。从WordPress.orgGithub安装。

需要注意的是,持久化对象缓存并不是万能的——带有2,000个Redis调用的页面加载可能需要2秒钟的全对象缓存事务。请确保您明智地使用对象缓存:保持键的数量合理,不要在每个键上存储大量数据,并避免前端写入和删除的拥堵。

出发去创造伟大吧!一旦您创造出伟大的东西,向我们发送功能请求(或错误报告)。查看维基页面以获取有用的代码片段和其他提示

安装

这假设您有一个具有所需的PhpRedis扩展和正在运行的Redis服务器(例如Pantheon)的PHP环境。WP Redis还可以通过humanmade/wp-redis-predis-client与Predis一起工作。

  1. object-cache.php安装到wp-content/object-cache.php,通过符号链接或复制文件。

  2. 如果您不在Pantheon上运行,请编辑wp-config.php以添加您的缓存凭据,例如。

     $redis_server = array(
         'host'     => '127.0.0.1',
         'port'     => 6379,
         'auth'     => '12345',
         'database' => 0, // Optionally use a specific numeric Redis database. Default is 0.
     );
    
  3. 如果您的Redis服务器通过套接字文件监听,则在host参数上设置其路径,并将端口更改为null

     $redis_server = array(
         'host'     => '/path/of/redis/socket-file.sock',
         'port'     => null,
         'auth'     => '12345',
         'database' => 0, // Optionally use a specific numeric Redis database. Default is 0.
     );
    
  4. 启动推进器:您现在已使用Redis支持WP的对象缓存。

  5. (可选)要使用wp redis WP-CLI命令,请激活WP Redis插件。如果您仅使用对象缓存插件,则不需要激活。

  6. (可选)要使用多个、独立的WordPress安装共享同一个Redis服务器,您可以使用WP_CACHE_KEY_SALT常量为每个安装定义一个唯一的盐。

  7. (可选) 要使用真正的缓存组,并具有删除给定组中所有键的能力,请使用 wp_cache_add_redis_hash_groups() 注册组,或将 WP_REDIS_USE_CACHE_GROUPS 常量定义为 true 以启用所有组。但是,当启用时,过期值不会被尊重,因为组键的过期功能不是由 Redis 支持 的。

  8. (可选) 在之前使用 WordPress 的短暂缓存的现有网站上,使用 WP-CLI 从选项表中删除所有(%_transient_%)短暂:wp transient delete-all。WP Redis 承担短暂缓存的职责。

  9. (可选) 要使用 Relay 而不是 PhpRedis 作为客户端,请将 WP_REDIS_USE_RELAY 常量定义为 true。对于支持请求,请使用 Relay 的 GitHub 讨论区

WP-CLI 命令

此插件实现了多种 WP-CLI 命令。所有命令都归类到 wp redis 命名空间。

$ wp help redis

NAME

  wp redis

SYNOPSIS

  wp redis <command>

SUBCOMMANDS

  cli         Launch redis-cli using Redis configuration for WordPress
  debug       Debug object cache hit / miss ratio for any page URL.
  enable      Enable WP Redis by creating the symlink for object-cache.php
  info        Provide details on the Redis connection.

使用 wp help redis <command> 了解有关每个命令的更多信息。

贡献

有关贡献的信息,请参阅 CONTRIBUTING.md

安全策略

报告安全漏洞

请通过 Patchstack 漏洞披露计划 报告在 WP Redis 插件源代码中发现的任何安全漏洞。Patchstack 团队将协助您进行验证、CVE 分配,并通知此插件的开发者。

常见问题解答

为什么我想使用这个插件?

如果您关心您站点的速度,使用高性能、持久的对象缓存可以产生巨大的影响。它可以减轻数据库的负载,并且对于加载 WordPress 运行所需的所有数据对象来说速度更快。

这个插件与其他缓存插件如何协同工作?

此插件是用于内部应用程序对象缓存的。它与页面缓存无关。在 Pantheon 上,您不需要额外的页面缓存,但如果您是自己托管,则可以与 WP Redis 一起使用您喜欢的页面缓存插件。

如何禁用不良行为者的持久对象缓存?

带有 2,000 个 Redis 调用的页面加载可能是 2 秒的对象缓存事务。如果您使用的插件错误地创建了大量缓存键,您可能可以通过禁用插件组的缓存持久性来减轻问题。

wp_cache_add_non_persistent_groups( array( 'bad-actor' ) );

此声明意味着使用 wp_cache_set( 'foo', 'bar', 'bad-actor' );wp_cache_get( 'foo', 'bad-actor' ); 将不会使用 Redis,而将回退到 WordPress 的默认运行时对象缓存。

为什么对象缓存有时会与数据库不同步?

WordPress 的 alloptions 缓存设计存在已知问题。具体来说,两个请求之间的竞争条件可能导致对象缓存有陈旧值。如果您认为您可能受到影响,请 审查此 GitHub 问题 以获取更多背景信息,包括解决方案。

变更日志

1.4.5-dev

1.4.4(2023 年 11 月 27 日)

  • 更新 Pantheon WP 编码标准到 2.0 [#445]
  • 处理 get_multiple 函数中的重复键 [#448](props @Souptik2001)

1.4.3(2023 年 6 月 26 日)

  • 错误修复:修复了假设 CACHE_PORT & CACHE_PASSWORD 已设置的问题。[428](props @timnolte)
  • 添加 WP.org 验证 GitHub 动作 [#435]
  • 错误修复:修复了 array_replace_recursive 和其他问题的顺序错误 [434] (致谢 @timnolte)
  • 错误修复:在 object-cache.php 中替换 wp_strip_all_tags 的使用 [434] (致谢 @timnolte)
  • 错误修复:不要从缓存密码中删除标签 [434] (致谢 @timnolte)

1.4.2 (2023年5月15日)

  • 错误修复:移除由 esc_html_exception_handler() 中引起的异常循环 [421]

1.4.1 (2023年5月11日)

  • 错误修复:wp_cache_flush_runtime 应仅清除本地缓存 [413]

1.4.0 (2023年5月9日)

  • 添加对 flush_runtimeflush_group 函数的支持 [#405]
  • 添加 pantheon-wp-coding-standards [#400]
  • 更新 CONTRIBUTING.MD [#406]
  • 更新 Composer 依赖 [#401]

1.3.5 (2023年4月6日)

  • 将测试版本提升至 6.2
  • 更新 Composer 依赖 [#394]

1.3.4 (2023年3月7日)

  • 如果 Redis 服务未连接,则设置 missing_redis_message [#391]

1.3.3 (2023年2月28日)

  • 添加 PHP 8.2 支持 [#388]
  • 移除 Grunt,向 Composer 文件添加有效许可证 [#387]
  • 更新 Composer 依赖 [#384] [#385]

1.3.2 (2022年12月5日)

  • 修复了损坏的 wp_cache_supports 函数 [#382].

1.3.1 (2022年12月2日)

  • 声明 wp_cache_supports 函数并支持功能。 [#378]
  • 将 dependabot 目标设置为 PR 的 develop 分支。 [#376]
  • 声明 wp_cache_supports 函数并支持功能。 [#378]

1.3.0 (2022年11月29日)

  • 添加 CONTRIBUTING.MD 和 GitHub 操作来自动化向 wp.org 的部署。[#368]

1.2.0 (2022年2月17日)

  • 通过 WP_REDIS_USE_RELAY 常量添加对 Relay 的支持 [#344].

1.1.4 (2021年10月21日)

  • 修复了 WP_REDIS_IGNORE_GLOBAL_GROUPS 检查中的一些错误逻辑 [#333].

1.1.3 (2021年10月21日)

  • 支持 WP_REDIS_IGNORE_GLOBAL_GROUPS 常量,以防止将组添加到全局缓存组 [#331].

1.1.2 (2021年3月24日)

  • 将用于其他地方的逻辑应用于 wp_redis_get_info() 中的 $_SERVER 回退 [#316].

1.1.1 (2020年8月17日)

  • 使用 wp_cache_get_multiple() 并内部缓存已预加载时,正确顺序返回缓存数据 [#292].

1.1.0 (2020年7月13日)

  • 为WordPress 5.5实现了 wp_cache_get_multiple() [#287].
  • 在连接Redis抛出异常时提前退出,以避免致命错误 [285].

1.0.1 (2020年4月14日)

  • 添加了对从环境/服务器变量指定Redis数据库编号的支持 [#273].

1.0.0 (2020年3月2日)

  • 插件稳定。

0.8.3 (2020年2月24日)

  • 通过直接使用 proc_open() 而不是 WP_CLI::launch() 修复了 wp redis cli [#268].

0.8.2 (2020年1月15日)

  • 在尝试连接Redis时捕获异常 [#265].

0.8.1 (2020年1月10日)

  • 添加了 WP_REDIS_DEFAULT_EXPIRE_SECONDS 常量以设置默认缓存过期值 [#264].

0.8.0 (2020年1月6日)

  • 使用 flushdb 而不是 flushAll 以避免清除整个Redis实例 [#259].

0.7.1 (2018年12月14日)

  • wp_cache_init() 中更好地支持如LudicrousDB之类的插件 [#231].
  • 清理了PHPCS问题。

0.7.0 (2017年8月22日)

0.6.2 (2017年6月5日)

  • 错误修复:在内部缓存中保留null值。
  • 错误修复:在获取时将数值值转换为其实际类型。

0.6.1 (2017年2月23日)

  • 错误修复:正确传递给 redis-cli 的空密码。
  • 测试套件的各种改进。

0.6.0 (2016年9月21日)

  • 引入了三个新的WP-CLI命令:用于显示任何URL的缓存命中/未命中比的 wp redis debug;用于显示Redis高级统计信息的 wp redis info;用于创建 object-cache.php 符号链接的 wp redis enable
  • 允许使用 $redis_server['database'] 定义Redis数据库。
  • 引入了 wp_cache_add_redis_hash_groups(),允许注册特定组使用Redis散列,比现有的 WP_REDIS_USE_CACHE_GROUPS 常量更精确。

0.5.0 (2016年4月27日)

  • 性能提升!从 wp_cache_get() 中移除冗余的 exists 调用,这可以将Redis调用的数量减半。
  • 以更安全的方式使用 add_action()$wpdb,以与在上述API可用之前加载对象缓存的Batcache兼容。
  • 出于调试目的,跟踪Redis调用的次数,并包括调用类型的分解。
  • 添加了对现有功能的大量更明确的测试覆盖率。
  • 为了与实际的Redis调用保持一致,使用 del 而不是 delete
  • 错误修复:如果组不是持久的,则永远不要对Redis进行 exists 调用。

0.4.0 (2016年3月23日)

  • 引入了 wp redis-cli,这是一个WP-CLI命令,可以与WordPress的Redis凭据一起启动redis-cli。
  • 错误修复:通过写入sitemeta表而不是活动站点的选项表,确保多站点上的回滚机制按预期工作。
  • 错误修复:使用 'default' 作为默认缓存组,与WordPress核心保持一致,因此 $wp_object_cache->add( 'foo', 'bar' ) === wp_cache_add( 'foo', 'bar' )

0.3.0 (2016年2月11日)

  • 介绍对Redis缓存组的可选支持。通过define( 'WP_REDIS_USE_CACHE_GROUPS', true );启用。启用后,WP Redis将以结构化的方式持久化缓存组,而不是将缓存键和组一起散列。
  • 使用PHP_CodeSniffer和WordPress编码标准嗅探器来确保WP Redis遵循WordPress编码标准。
  • 错误修复:通过确保提供的$port为null,允许在$redis_server['host']中使用Unix套接字。

0.2.2(2015年11月24日)

  • 错误修复:使用INSERT IGNORE INTO而不是INSERT INTO,以防止当两个并发进程同时尝试写入failback标志时发生SQL错误。
  • 错误修复:使用E_USER_WARNINGtrigger_error()
  • 错误修复:在认证过程中捕获抛出的异常,以允许回退到内部对象缓存。

0.2.1(2015年11月17日)

  • 错误修复:防止在多站点中尚未初始化$wpdb->options时发生SQL错误。

0.2.0(2015年11月17日)

  • 当Redis不可用或间歇性时,优雅地回退到WordPress对象缓存。以前,WP Redis会引发硬致命错误。
  • 如果Redis在请求中途消失,触发PHP错误,以便您在日志中监控。根据特定错误消息尝试一次重新连接。
  • 当Redis在失败后恢复时,强制Redis执行flushAll。此行为可以通过WP_REDIS_DISABLE_FAILBACK_FLUSH常量来禁用。
  • 当Redis不可用但预期应该可用时,显示管理提示。

0.1

  • 为所有人利益提交的代码的初始版本。

升级通知

1.4.0 (2023年5月9日)

WP Redis 1.4.0增加了对flush_runtimeflush_group函数的支持。如果您已复制object-cache.php并进行了自己的更改,请确保也复制这些新增内容。