socloz/knp-zend-cache-bundle

此包已被废弃,不再维护。未建议任何替代包。

将 Zend Cache 框架集成到 Symfony2。

安装数: 27,404

依赖者: 0

建议者: 0

安全: 0

星标: 1

关注者: 10

分支: 16

类型:symfony-bundle

0.1 2012-06-15 10:46 UTC

This package is not auto-updated.

Last update: 2020-01-20 05:31:30 UTC


README

KnpZendCacheBundle

在 Symfony2 中,你可以使用 HTTP 缓存。这对于缓存页面或页面的一部分非常有用。

但如果你想要缓存一个变量呢?这就是你应该使用 KnpZendCacheBundle 的地方。

为了避免代码重复,我们在我们的 Symfony2 应用程序中使用了知名的 Zend Cache 组件。
它运行得很好,并且已经具备了所有 sorts 的选项 - 如果你需要的话。

幕后

此包允许从 DIC 中配置 Zend\Cache\Manager 并实例化它。
它不包含任何缓存逻辑:这是 Zend Cache 的角色。

因此,如果您需要普通功能,请阅读 Zend Cache 文档

请参阅 如何声明缓存模板、可用的 缓存前端缓存后端

安装

将 KnpZendCacheBundle 下载到 vendor/bundles/Knp/Bundle/ZendCacheBundle 目录

如果你使用 git

git submodule add http://github.com/KnpLabs/KnpZendCacheBundle.git vendor/bundles/Knp/Bundle/ZendCacheBundle

将 zend-cache 下载到你的 vendor/Zend/Cache 目录

如果你使用 git

git submodule add http://github.com/KnpLabs/zend-cache.git vendor/Zend/Cache
git submodule add http://github.com/KnpLabs/zend-filter.git vendor/Zend/Filter

将新的命名空间添加到你的自动加载器

<?php
// app/autoload.php
$loader->registerNamespaces(array(
    'Knp'                       => __DIR__.'/../vendor/bundles',
    'Zend'                      => __DIR__.'/../vendor',
    // ...
));

将 KnpZendCacheBundle 添加到你的应用程序内核

<?php
// app/AppKernel.php
public function registerBundles()
{
    return array(
        // ...
        new Knp\Bundle\ZendCacheBundle\KnpZendCacheBundle(),
        // ...
    );
}

关于 Zend Cache 应了解的事项

前端:你想缓存什么?

在 Zend Framework 中,缓存由前端操作

  • 核心 是一个通用的缓存前端,由其他类扩展。你将大多数时间使用它。
  • 输出 是一个输出捕获前端。它使用 PHP 的输出缓冲区来捕获其 start() 和 end() 方法之间的一切。
  • FunctionFrontend 缓存函数调用的结果。它有一个名为 call() 的主方法,该方法接受一个函数名和调用参数的数组。
  • ClassFrontendFunction 不同,因为它允许缓存对象和静态方法调用
  • 文件 是由“主文件”的修改时间驱动的前端。它在配置或模板问题示例中非常有趣。也可以使用多个主文件。
  • 页面 类似于 输出,但设计用于整个页面。无法仅使用页面进行缓存单个块。
  • 捕获页面,但这个类专门设计为与 静态 后端协同工作,以协助将整个 HTML / XML 页面或其他内容缓存到本地文件系统上的物理静态文件。

您可以在 Zend Framework 缓存前端 上找到更多信息和使用选项。

后端:您想如何缓存它?

缓存记录通过后端适配器存储

  • 文件 将缓存记录存储到文件中
  • Memcached 将缓存记录存储到 memcached 服务器中
  • Sqlite 将缓存记录存储到 SQLite 数据库中
  • Apc 通过 APC 扩展在共享内存中存储缓存记录
  • Xcache 通过 XCache 扩展在共享内存中存储缓存记录
  • StaticBackend 与 Zend_Cache_Frontend_Capture(两个必须一起使用)协同工作,将请求的输出保存为静态文件。这意味着静态文件将直接在后续请求上提供服务,没有任何 PHP 或 Zend Framework 的参与。
  • TwoLevels 在两个其他后端中存储缓存记录:一个快速但有限的(如 Apc,Memcache...)和一个“慢速”的(如 File,Sqlite)
  • ZendPlatform 使用 Zend Platform 产品的内容缓存 API。

您可以在 Zend Framework 缓存后端 上找到更多信息和使用选项。

KnpZendCacheBundle 使用方法

假设您有一个变量 $myLastTweets

为了计算这个变量,您必须调用一个 API,解码一些内容,创建一些对象……这需要时间。您只想每2小时计算一次。

  • 我们将定义一个具有2小时生命周期的 Core 前端,并序列化该变量
  • 目前我们将使用文件后端。在生产环境中,我们可能决定使用 Memcache 或 APC:这只是更改一个配置文件的问题

因此,为了做到这一点,我们必须

  • 在我们的配置文件中定义一个新的缓存 模板
  • 从服务容器中使用它

1 - 定义一个新的缓存模板

# app/config.yml
knp_zend_cache:
    templates:
        tweets_and_stuff:
            frontend:
                name: Core
                options:
                    lifetime: 7200
                    automatic_serialization: true
            backend:
                name: File
                options:
                    cache_dir: %kernel.root_dir%/cache/%kernel.environment%

2 - 使用它

从服务容器中获取您声明的缓存

<?php

// Given you have access to the container $container
$cache = $container->get('knp_zend_cache.manager')->getCache('tweets_and_stuff');

// Or if you are in a controller:
$cache = $this->get('knp_zend_cache.manager')->getCache('tweets_and_stuff');

// see if a cache already exists:
if (false === ($myLastTweets = $cache->load('last_tweets'))) {

    // cache miss: call the webservice and do stuff
    $myLastTweets = $tweetService->doComplexStuff();

    $cache->save($myLastTweets, 'last_tweets');
}

return $myLastTweets;

就是这样!