为WordPress提供的PSR-16实现,数据缓存在对象缓存、作为transients、作为选项以及作为对象元数据。

v0.1.0 2024-01-02 00:58 UTC

This package is auto-updated.

Last update: 2024-08-31 00:36:20 UTC


README

此库为WordPress项目提供PSR-16实现。它包括将数据缓存在对象缓存、作为transients、作为选项以及作为帖子、术语或其他对象元数据的适配器。

安装

使用以下命令安装最新版本

$ composer require alleyinteractive/wp-psr16

基本用法

此库中的所有适配器都实现了\Psr\SimpleCache\CacheInterface接口,除了它们的静态构造函数之外,没有其他公共API。

<?php

// Cache data using transients as the datastore.
$transient = \Alley\WP\SimpleCache\Transient_Adapter::create();

// Cache data using the object cache as the datastore.
$object_cache = \Alley\WP\SimpleCache\Object_Cache_Adapter::create();

/*
 * Cache data using options as the datastore. The options are not autoloaded.
 * Using options as the datastore can be slower than using transients or the
 * object cache, but items are never evicted like in Memcache or Redis.
 */
$option = \Alley\WP\SimpleCache\Option_Adapter::create();

/*
 * Cache data using object metadata as the datastore. This allows cache items to
 * be associated with a specific post, term, or other object that supports metadata.
 * For example, you could cache an individual post's related posts. Like options,
 * using metadata as the datastore can be slower, but items are never evicted.
 */
$post_meta   = \Alley\WP\SimpleCache\Metadata_Adapter::for_post( 123 );
$term_meta   = \Alley\WP\SimpleCache\Metadata_Adapter::for_term( 123 );
$user_meta   = \Alley\WP\SimpleCache\Metadata_Adapter::create( 'user', 123 );
$custom_meta = \Alley\WP\SimpleCache\Metadata_Adapter::create( 'custom', 123 );

实现细节

WordPress在选项和元数据数据库表中返回字符串值,这与PSR-16要求从缓存中返回“确切地像传递[包括]变量类型”的数据不兼容。

此库通过在保存到和从存储中检索值时序列化和反序列化值来绕过数据库的默认行为,这会产生一些副作用

  • 缓存的项存储在包含序列化值的自定义数组结构中。
  • 缓存键带有前缀存储,以避免给人以可以使用传递给适配器的缓存键直接使用WordPress API检索原始值的印象。
  • 自定义数组结构包括项的过期时间,这使得选项和元数据适配器能够支持TTL。

\Alley\WP\SimpleCache\PSR16_Compliant装饰器类负责确保与数据类型、过期时间、合法缓存键以及规范的其他要求方面的PSR-16兼容性。您可以使用此装饰器与您自己的缓存适配器或与另一个库的适配器一起使用。

限制

  • transient、选项和元数据适配器不支持clear()方法。
  • transient、选项和元数据适配器不支持保存二进制数据。请咨询您持久对象缓存插件提供商,以确定它是否支持保存二进制数据。
  • 元数据适配器绕过特定于类型的函数,如get_post_meta(),而选择使用底层函数,如get_metadata(),以与其他元数据函数(如metadata_exists())兼容。

关于

许可

GPL-2.0-or-later

维护者

Alley Interactive