socloz / knp-zend-cache-bundle
此包已被废弃,不再维护。未建议任何替代包。
将 Zend Cache 框架集成到 Symfony2。
0.1
2012-06-15 10:46 UTC
Requires
- php: >=5.3.2
- symfony/framework-bundle: >=2.0.0
- zendframework/zend-cache: 2.0.0-beta1
- zendframework/zend-filter: 2.0.0-beta1
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() 的主方法,该方法接受一个函数名和调用参数的数组。
- ClassFrontend 与 Function 不同,因为它允许缓存对象和静态方法调用
- 文件 是由“主文件”的修改时间驱动的前端。它在配置或模板问题示例中非常有趣。也可以使用多个主文件。
- 页面 类似于 输出,但设计用于整个页面。无法仅使用页面进行缓存单个块。
- 捕获 是 页面,但这个类专门设计为与 静态 后端协同工作,以协助将整个 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;
就是这样!