humanmade/wp-redis

维护者

详细信息

github.com/humanmade/wp-redis

源代码

安装次数: 146,847

依赖关系: 3

建议者: 0

安全性: 0

星标: 4

关注者: 9

分支: 67

类型:wordpress-plugin


README

Actively Maintained

贡献者: getpantheon, danielbachhuber, mboynes, Outlandish Josh jspellman jazzs3quence 标签: 缓存, 插件, redis 最低版本要求: 3.0.1 测试版本至: 6.2 稳定版本: 1.4.1 许可: GPLv2 或更高版本 许可链接: https://gnu.ac.cn/licenses/gpl-2.0.html

使用 Redis 作为高性能内存存储后端,备份您的 WP 对象缓存。

描述

CircleCI

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

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

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

出发,创造奇迹!一旦你创造出一些伟大的东西,给我们发送功能请求(或错误报告)。查看 wiki 以获取 有用的代码片段和其他技巧

安装

这假设您有一个具有所需 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. (可选) 要使用同一 Redis 服务器与多个独立的 WordPress 安装,您可以使用 WP_CACHE_KEY_SALT 常量为每个安装定义唯一的盐。

  7. (可选) 要使用真正的缓存组,具有删除特定组所有键的能力,请使用 wp_cache_add_redis_hash_groups() 注册组,或将 WP_REDIS_USE_CACHE_GROUPS 常量定义为 true 以启用所有组。然而,当启用时,过期值不会被尊重,因为 Redis 不支持在组键上设置过期时间。(Redis相关问题#6620)

  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

常见问题解答

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

如果您担心您站点的速度,使用高性能、持久对象缓存可以产生巨大影响。它减轻了数据库的负载,并使加载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.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针对PRs的目标分支为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 redis cli,而不是使用WP_CLI::launch() [#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日)

  • 修复了bug:在内部缓存中保留null值。
  • 修复了bug:在获取时将数值转换为它们的真实类型。

0.6.1 (2017年2月23日)

  • 修复了bug:正确传递空密码到redis-cli
  • 对测试套件进行了各种改进。

0.6.0 (2016年9月21日)

  • 引入了三个新的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 (2016年4月27日)

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

0.4.0 (2016年3月23日)

  • 引入了wp redis-cli,这是一个WP-CLI命令,用于使用WordPress的Redis凭据启动redis-cli。
  • 修复了bug:通过写入sitemeta表而不是活动站点的选项表,确保在多站点上failback机制按预期工作。
  • 修复了bug:使用'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编码标准sniffs来确保WP Redis遵循WordPress编码标准。
  • 修复了bug:通过确保提供的$port是null,允许在$redis_server['host']中使用Unix套接字。

0.2.2 (2015年11月24日)

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

0.2.1 (2015年11月17日)

  • 修复了bug:防止在多站点上,当$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并进行了自己的更改,请确保也将这些新增功能复制过来。