knplabs/knp-zend-cache-bundle

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

将 Zend Cache 框架集成到 Symfony2。

安装数: 3,094

依赖者: 1

建议者: 0

安全: 0

星标: 38

关注者: 34

分支: 14

开放问题: 1

类型:symfony-bundle

0.1 2012-06-15 10:46 UTC

This package is auto-updated.

Last update: 2022-09-23 13:37:50 UTC


README

KnpZendCacheBundle

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

但是,如果你想要缓存一个变量,你应该使用 KnpZendCacheBundle。

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

幕后

此包允许从 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 小时并序列化变量的核心前端
  • 目前我们将使用文件后端。在生产环境中,我们可能决定使用 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;

就这样!