WP Redis

描述

对于需要处理高流量、提高登录用户访问速度或动态页面负载的网站来说,高速持久的对象缓存是必不可少的。此外,您还需要能在应用程序的多个实例中进行扩展的缓存,因此不能使用本地文件缓存或 APC。

Redis 是一个很好的答案,我们在 Pantheon 平台上也捆绑了它。这是我们用于集成缓存的插件,但如果你有 Redis,也可以在任何自托管的 WordPress 网站上使用它。请从 WordPress.orgGithub 安装。

值得注意的是,持久化对象缓存并非万能–页面加载时调用 2,000 次 Redis,就相当于进行了整整 2 秒钟的对象缓存事务处理。请确保明智地使用对象缓存:保持合理的键数,不要在每个键上存储大量数据,并避免前端急速写入和删除。

来吧,创造精彩!一旦你做出了伟大的作品,请向我们发送功能请求(或错误报告)。请查看维基,了解有用的代码片段和其他技巧

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

安装

前提是您有一个带有 所需 PhpRedis 扩展的 PHP 环境和一个正常工作的 Redis 服务器(如 Pantheon)。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 服务器通过 sockt 文件监听,请在 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 讨论

常见问题

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

如果您担心网站的运行速度,那么使用高性能的持久对象缓存来支持网站会产生巨大的影响。它可以减轻数据库的负担,更快地加载 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 问题,以获取更多上下文链接,包括解决方法。

Where do I report security bugs found in this plugin?

Please report security bugs found in the source code of the WP Redis plugin through the Patchstack Vulnerability Disclosure Program. The Patchstack team will assist you with verification, CVE assignment, and notify the developers of this plugin.

评价

2024年1月15日 2 回复
Great free Redis plugin which even does not need to be kept installed. Just install and copy object-cache.php to wp-content. Then add a wp-config setting (after installing redis on your server) and you are good to go. Check with WP health on dashboard. Thanks to the developers!
2023年10月16日
Great plugin. I'm evaluating it now as a backend Redis cache. However, installation was not straightforward or clear. I wish it was automatic. However, the manual install requires copying a file manually. If you run multiple WordPress sites on a self-hosted install, you must also make sure to edit the object-cache.php file and add a cache salt key or you will get errors. Once these are resolved, it seems to be functioning well. 4 stars for the excellent plugin.-1 for the difficult installation. I wish it were more straightforward.
2023年1月24日
Congratulations to the developers of this free extension, works wonderfully without wasting time, a performance gain examplary on the Back-Office side with a client site with 40 extensions. 10s -> 1s Keep it up folks 😉
2021年6月4日
Well maintained, free and open source plugin which only job is to implement a redis-based object cache, which does it well.
2021年4月29日
It is working great!, How does this plugin differs with "Redis Object Cache" since you don't offer premium subscription for the plugin? drop-in based, no need to activate the plugin, just follow the GIT Instruction. Currently on my staging environment for testing.
阅读所有18条评价

贡献者及开发者

“WP Redis” 是开源软件。 以下人员对此插件做出了贡献。

贡献者

将“WP Redis”翻译成您的语言。

对开发感兴趣吗?

您可以浏览代码,查看SVN仓库,或通过RSS订阅开发日志

更新日志

1.4.4 (November 27, 2023)

  • Updates Pantheon WP Coding Standards to 2.0 [#445]
  • Handle duplicate keys in get_multiple function [#448] (props @souptik)

1.4.3 (June 26, 2023)

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

1.4.2 (May 15, 2023)

  • 错误修正:删除 _exception_handler()esc_html 引起的异常循环 [421] 。

1.4.1 (May 11, 2023)

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

1.4.0 (May 9, 2023)

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

1.3.5 (April 6, 2023)

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

1.3.4 (March 7, 2023)

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

1.3.3 (February 28, 2023)

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

1.3.2 (December 5, 2022)

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

1.3.1 (December 2, 2022)

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

1.3.0 (November 29, 2022)

  • 已添加 CONTRIBUTING.MD 和 GitHub 操作,以便自动部署到 wp.org。[#368]

1.2.0 (February 17, 2022)

  • 通过 WP_REDIS_USE_RELAY 常量 [#344] 添加对中继的支持。

1.1.4 (October 21, 2021)

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

1.1.3 (October 21, 2021)

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

1.1.2 (March 24, 2021)

  • wp_redis_get_info() [#316]中,应用在其他地方使用的逻辑回退到 $_SERVER

1.1.1 (August 17, 2020)

  • 当使用 wp_cache_get_multiple() 且内部缓存已启动时,按正确顺序返回缓存数据 [#292] 。

1.1.0 (July 13, 2020)

  • 为 WordPress 5.5 [#287] 实现 wp_cache_get_multiple()
  • 在连接 Redis 时抛出异常时提前终止,以避免致命错误 [285] 的发生。

1.0.1 (April 14, 2020)

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

1.0.0 (March 2, 2020)

  • 插件稳定。

0.8.3 (February 24, 2020)

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

0.8.2 (January 15, 2020)

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

0.8.1 (January 10, 2020)

  • 添加 WP_REDIS_DEFAULT_EXPIRE_SECONDS 常量来设置默认的缓存过期值 [#264]。

0.8.0 (January 6, 2020)

  • 使用 flushdb 代替 flushAll 以避免刷新整个 Redis 实例 [#259] 。

0.7.1 (December 14, 2018)

  • wp_cache_init() 中更好地支持像 LudicrousDB [#231] 这样的插件。
  • 清除 PHPCS 问题。

0.7.0 (August 22, 2017)

0.6.2 (June 5, 2017)

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

0.6.1 (February 23, 2017)

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

0.6.0 (September 21, 2016)

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

0.5.0 (April 27, 2016)

  • 性能提升!删除了 wp_cache_get() 中多余的 exists 调用,从而轻松将 Redis 调用次数减半。
  • 以更安全的方式使用 add_action()$wpdb 以与 Batcache 兼容,后者会在上述 API 可用之前加载对象缓存。
  • 为调试目的,跟踪调用 Redis 的次数,包括调用类型的细分。
  • 针对现有功能添加了一系列更明确的测试覆盖范围。
  • 为了与 Redis 的实际调用保持一致,调用 del 而不是 delete
  • 错误修正:如果组不是持久的,则永远不要对 Redis 进行 exists 调用。

0.4.0 (March 23, 2016)

  • 引入 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 (February 11, 2016)

  • 引入对 Redis 缓存组的选择支持。使用 define( 'WP_REDIS_USE_CACHE_GROUPS', true ); 启用。启用后,WP Redis 将以结构化方式持久化缓存组,而不是将缓存密钥和缓存组放在一起散列。
  • 使用 PHP_CodeSniffer 和 WordPress 编码标准嗅探器,确保 WP Redis 符合 WordPress 编码标准。
  • 错误修正:通过确保提供的 $port 为空,允许在 $redis_server['host'] 中使用 Unix 套接字。

0.2.2 (November 24, 2015)

  • 错误修正:使用 INSERT IGNORE INTO 代替 INSERT INTO 以防止两个并发进程同时尝试写入故障标志时发生 SQL 错误。
  • 错误修正:在 trigger_error() 中使用 E_USER_WARNING
  • 错误修正:捕捉身份验证过程中抛出的异常,允许失败后返回内部对象缓存。

0.2.1 (November 17, 2015)

  • 错误修正:防止多站点上 $wpdb->options 尚未初始化时出现 SQL 错误。

0.2.0 (November 17, 2015)

  • 当 Redis 不可用或时断时续时,WordPress 会优雅地退回到对象缓存。在此之前,WP Redis 会出现致命故障。
  • 如果 Redis 在请求中途消失,会触发 PHP 错误,以便在日志中进行监控。根据特定错误信息尝试重新连接。
  • 当 Redis 失败后返回时,强制 flushAll。可以使用 WP_REDIS_DISABLE_FAILBACK_FLUSH 常量禁用此行为。
  • 当 Redis 不可用但预计会可用时,显示管理员通知。

0.1

  • 首次提交工作代码,让所有人受益。