alleyinteractive / cache-collector

动态缓存键收集器,易于清理

安装: 11

依赖项: 0

建议者: 0

安全: 0

星标: 3

关注者: 22

分支: 0

开放问题: 4

类型:wordpress-plugin

v1.1.0 2024-07-18 20:32 UTC

README

Coding Standards Testing Suite

动态缓存键收集器,易于清理。

背景

大型WordPress站点使用Memcache时,常见的难题是在尝试清理动态生成的缓存键时出现的问题。例如,如果一个缓存键是远程请求的哈希值。您需要计算哈希缓存键才能从缓存中正确清理它。另一个常见的问题是尝试清理特定组中的所有缓存键(Memcache不支持组清理)。

Cache Collector通过将缓存/瞬态键存储在集合中解决此问题。然后可以使用单个命令清理这些集合。以下是一个实际用例

当查看帖子时,帖子相关的帖子从远程源获取并显示给用户。由于远程请求,此操作成本高昂,需要缓存。当帖子更新时,相关的帖子缓存也需要刷新。

进入Cache Collector。当帖子更新时,相关的帖子缓存键被添加到集合中。当帖子更新时,与帖子关联的缓存键将自动清理。

反过来,假设远程数据源存在问题,需要清理所有相关的帖子缓存键。可以通过清理“相关帖子”缓存集合来完成此操作。这存储了所有相关帖子的缓存键。您可以通过一个命令清理整个缓存组,而无需为每个缓存键计算缓存键。

安装

您可以通过composer安装此包

composer require alleyinteractive/cache-collector

用法

在WordPress中激活插件并使用以下方法与缓存收集器进行交互。

注册键

注册缓存键时的重要提示:应在缓存/瞬态存储时注册键。当键存储时,系统将为键设置一个过期日期,以便最终从集合中清理未使用的键。为了防止不断更新集合中的键并降低网站性能,应在缓存/瞬态存储时注册键。缓存收集器最终将删除已过期的键。

TL;DR:仅在缓存/瞬态存储时注册键。不要在每次页面加载时都注册它。

在缓存集合中注册键

cache_collector_register_key( string $collection, string $key, string $group = '', int $ttl = 0, string $type = 'cache' );

// Example using named arguments.
cache_collector_register_key(
	collection: 'related_posts',
	key: $related_posts_cache_key,
	group: 'related_posts',
	ttl: 3600,
	type: 'cache',
);

插件还提供了cache_collector_register_transient_key()cache_collector_register_cache_key(),以使为瞬态/缓存注册键变得更加容易,而无需指定$type参数。

cache_collector_register_transient_key( string $collection, string $transient, int $ttl = 0 );
cache_collector_register_cache_key( string $collection, string $key, string $group = '', int $ttl = 0 );

清理缓存集合

清理集合中的所有缓存条目。

cache_collector_purge( string $collection );

注册与帖子相关的键

帖子缓存集合是与帖子相关的缓存键集合。当帖子更新时,帖子的缓存集合将自动清理。这允许您一次清理与帖子相关的所有缓存键。

cache_collector_register_post_key( \WP_Post|int $post, string $key, string $group = '', string $type = 'cache' );

// Example using named arguments.
cache_collector_register_post_key(
	post: $post,
	key: $related_posts_cache_key,
	group: 'related_posts',
	type: 'cache',
);

清理帖子的缓存集合

清理与帖子相关的缓存集合。

cache_collector_purge_post( \WP_Post|int $post_id );

注册与术语相关的键

cache_collector_register_term_key( \WP_Term|int $term, string $key, string $group = '', string $type = 'cache' );

// Example using named arguments.
cache_collector_register_term_key(
	term: $term,
	key: $related_posts_cache_key,
	group: 'related_posts',
	type: 'cache',
);

清理术语的缓存集合

cache_collector_purge_term( \WP_Term|int $term );

完整示例

以下示例展示了如何使用缓存收集器注册用于未来清理的缓存键。

$arguments = [
	'limit' => 100,
	'term' => '...',
	'fields' => [ ... ],
];

$data = wp_cache_get( md5( $arguments ), 'my_cache_group' );

if ( false === $data ) {
	$data = remote_data_fetch( $arguments );
	wp_cache_set( md5( $arguments ), $data, 'my_cache_group' );

	// Register the cache key for the collection.
	cache_collector_register_cache_key( 'my_collection', md5( $arguments ), 'my_cache_group' );
}

现在我们可以在需要时清理缓存集合

cache_collector_purge( 'my_collection' );

我们也可以使用插件中包含的WP-CLI命令来清理

wp cache-collector purge my_collection

测试

运行composer test以运行针对PHPUnit和插件中的PHP代码的测试。

变更日志

请参阅变更日志获取有关最近更改的更多信息。

致谢

此项目由Alley Interactive积极维护。喜欢你所看到的?加入我们工作

许可证

GNU通用公共许可证(GPL)。有关更多信息,请参阅许可证文件