knplabs / 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 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() 的主要方法,该方法接受一个函数名和调用参数的数组。
- 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 小时并序列化变量的核心前端
- 目前我们将使用文件后端。在生产环境中,我们可能决定使用 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;
就这样!