dantleech / sf-http-cache-tagging

Symfony HTTP Cache Tagging 中间件

dev-master / 1.0.x-dev 2016-04-08 12:37 UTC

This package is auto-updated.

Last update: 2024-08-29 04:36:54 UTC


README

Build Status StyleCI

简介

此软件包提供了一种中间件,允许您将 "标签" 功能添加到 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 文件。