dantleech / sf-http-cache-tagging
Symfony HTTP Cache Tagging 中间件
Requires
- php: ^5.5.9||^7.0.0
- symfony/filesystem: ^2.6
- symfony/http-kernel: ^2.6
Requires (Dev)
- doctrine/cache: ^1.6
- phpunit/phpunit: ^4.6
This package is auto-updated.
Last update: 2024-08-29 04:36:54 UTC
README
简介
此软件包提供了一种中间件,允许您将 "标签" 功能添加到 Symfony HTTPCache。
这意味着您可以关联响应与标签,这些标签以后可以被失效。这意味着您可以无限期地缓存响应,只有在页面内容更改时才失效。
功能
- 为 Symfony HTTP Cache 添加标签功能的中间件。
- 可配置和可扩展的标签存储。
- 本地远程标签失效。
- 可配置 HTTP 头部。
- 可配置标签编码。
快速开始
安装
使用 composer 需求库
$ composer require dtl/http-cache-tagging
您需要一个存储策略,最简单的方法是使用 DoctrineCache
策略,为此您需要 doctrine/cache
包。
$ composer require doctrine/cache
包装内核
use Doctrine\Common\Cache\PhpFileCache; use Symfony\Component\HttpKernel\HttpCache\Store; use Symfony\Component\HttpKernel\HttpCache\HttpCache; use DTL\Symfony\HttpCacheTagging\Storage\DoctrineCache; use DTL\Symfony\HttpCacheTagging\Manager\TagManager; use DTL\Symfony\HttpCacheTagging\TaggingKernel; // your main application $app = new TestKernel(); // the standard Symfony HTTP cache $store = new Store('/path/to/keep/cache'); $httpCache = new HttpCache($app, $store); // our tag storage strategy $tagStorage = new DoctrineCache(new PhpFileCache('/path/to/keep/tags')); $tagManager = new TagManager($tagStorage, $store); // now you can procss the request $app = new TaggingKernel($httpCache, $tagManager); $app->handle(Request::create());
标记响应
要标记响应,只需将标签添加到配置的标签头部(默认为 X-Cache-Tags
)。
class MyController { // .. public function someAction(Request $request) { $id = 1; $entity = $this->entitymanager->find($id); $tag = get_class($entity) . $id; $response = Response::create($entity->getHelloWorld()); $response->headers->set('X-Cache-Tags', json_encode([ $tag ])); return $response; } }
注意,上面我们使用了 JSON 编码将标签转换为字符串。默认情况下,期望是一个 JSON 编码的字符串,但是您也可以选择使用 逗号分隔
的值策略或您选择的任何编码系统,通过在 tag_encoding
选项中指定回调来实现。
标签缓存条目失效
失效可以通过三种不同的方式完成
- 直接失效。
- 请求失效。
- 响应失效。
直接失效
是指您直接从应用程序中清除缓存,为此您需要将您实例化的 TagManager
注入到应用程序内核中。
请求失效
是指您向缓存服务器或服务器发送单独的 HTTP 请求。默认情况下,这应该是一个带有 X-Cache-Invalidate-Tags
头部编码的 POST
请求。
注意,当您有多个服务器时,只能使用请求失效。
响应失效
是指您在 HTTP 响应中设置失效头部。这具有与直接失效相同的优点,但避免了注入标签管理器作为服务。默认期望的是 X-Cache-Invalidate-Tags
头部。
响应方法是可能最简单的
class MyController { // ... public function editAction(Request $request) { $id = 1; $entity = $this->entitymanager->find($id); $tag = get_class($entity) . $id; // update the entity $response = // get your response $response->headers->set('X-Cache-Invalidate-Tags', json_encode([ $tag ])); return $response; } }
在这里,我们正在编辑代表您网站页面的对象,我们在响应发送后设置响应头,任何具有实体标签的缓存条目都将被删除。
您还需要更新内核包装为
$kernel = new TaggingKernel($httpCache, $tagManager, array('invalidate_from_response' => true));
配置
- purge_method: 在远程失效时使用清除方法,请注意,Symfony HTTP 缓存不支持
PURGE
方法。 - header_tags: 用于标记响应的头部,默认为
X-Cache-Tags
。 - header_invalidate_tags: 用于请求(远程)或响应(本地)中失效标签的头部。默认是
X-Cache-Invalidate-Tags
。 - tag_encoding: 中间件应该如何解码标签,可以是
json
(默认),comma-separate
或接收原始标签字符串并返回数组的 PHP 可调用函数。 - ips: 可能远程清除缓存的 IP 地址列表。
许可证
此库在 MIT 许可证下发布。有关更多信息,请参阅包含的 LICENSE 文件。