snicco/better-wp-cache

v2.0.0-beta.9 2024-09-07 14:27 UTC

README

codecov Psalm Type-Coverage Psalm level PhpMetrics - Static Analysis PHP-Versions

BetterWPCache 是一个轻量级库,允许您将 持久 WordPress 对象缓存 作为 PSR-16 缓存或 PSR-6 缓存使用。

此外,BetterWPCache 支持 缓存标签

此库使用 Redis Object Cache 插件(由 Till Krüss 提供)对官方 php-cache/integration-tests 进行了 100% 的集成测试。

目录

  1. 动机
  2. 安装
  3. 使用方法
    1. 这个是否与任何缓存插件兼容?
    2. PSR-6
    3. PSR-16
    4. 缓存标签
  4. 贡献
  5. 问题和 PR
  6. 安全性

动机

我们开发这个库是因为许多 WordPress 相关的 Snicco 项目 需要某种形式的缓存。

为了给用户提供最大的灵活性,它们都只依赖于 PSR 缓存接口

但是使用这些接口意味着无法在已连接的 WP_Object_Cache 中使用这些组件。

BetterWPCache 解决了这个问题。

此库有三个主要用途

  1. 您正在开发一个 分布式 WordPress 库,不想依赖 WP_Object_Cache
  2. 您正在使用任何依赖于 PSR 缓存接口的 PHP 包,并且想使用您的 WordPress 缓存插件。
  3. 您需要 缓存标签,这是 WP_Object_Cache 不支持的。

理想情况下,WordPress 核心会用 PSR 缓存接口替换自定义的 WP_Object_Cache,这样就不需要这个库了。同时 BetterWPCache 将会完成这项工作。

安装

composer require snicco/better-wp-cache

使用方法

这个是否与任何缓存插件兼容?

简短回答: 是的!

详细回答:只要您的缓存插件正确实现了 wp_cache_xxx 函数。此库只使用 官方 WordPress 缓存函数

创建 PSR-6 缓存

这是如何从您最喜欢的 WordPress 缓存插件创建 PSR-6 缓存。

use Snicco\Component\BetterWPCache\CacheFactory;

$cache_group = 'my_plugin';
$psr_6_cache = CacheFactory::psr6($cache_group);

创建 PSR-16 缓存

这是如何从您最喜欢的 WordPress 缓存插件创建 PSR-16 缓存。

use Snicco\Component\BetterWPCache\CacheFactory;

$cache_group = 'my_plugin';
$psr_16_cache = CacheFactory::psr16($cache_group);

缓存标签

缓存标签需要 PSR-6 缓存。

use Snicco\Component\BetterWPCache\CacheFactory;

$cache_group = 'my_plugin';
$psr_6_cache = CacheFactory::psr6($cache_group);

$taggable_cache = CacheFactory::taggable($psr_6_cache);

$taggable_cache 是一个 TaggableCacheItemPoolInterface 的实例,它正在成为 PSR 标准。

摘自 官方文档

use Snicco\Component\BetterWPCache\CacheFactory;

$cache = CacheFactory::taggable(CacheFactory::psr6('my_plugin'));

$item = $cache->getItem('tobias');
$item->set('value')->setTags(['tag0', 'tag1'])
$cache->save($item);

$item = $cache->getItem('aaron');
$item->set('value')->setTags(['tag0']);
$cache->save($item);

// Remove everything tagged with 'tag1'
$cache->invalidateTags(['tag1']);
$cache->getItem('tobias')->isHit(); // false
$cache->getItem('aaron')->isHit(); // true

$item = $cache->getItem('aaron');
echo $item->getPreviousTags(); // array('tag0')

// No tags will be saved again. This is the same as saving
// an item with no tags.
$cache->save($item);

贡献

此存储库是 Snicco 项目 开发存储库的只读分割。

这是您可以如何贡献.

报告问题和发送 pull request

请在 Snicco monorepo 中报告问题。

安全性

如果您在 BetterWPCache 中发现安全漏洞,请遵循我们的 披露程序