alleyinteractive / cache-collector
动态缓存键收集器,易于清理
This package is auto-updated.
Last update: 2024-09-18 20:49:13 UTC
README
动态缓存键收集器,易于清理。
背景
大型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)。有关更多信息,请参阅许可证文件。