【问题标题】:ZF2 - Saving a result of a function in cacheZF2 - 在缓存中保存函数的结果
【发布时间】:2015-03-22 22:19:57
【问题描述】:

我制作了一个视图助手,用于在输出之前检查外部 URL 是否存在。其中一些 URL 在我的主要布局中,因此通过一直调用所有这些 URL 来检查它们是否存在,检查会大大降低我的网站速度。我想保存该函数的输出,以便它仅在不到一小时或一天内未检查过相同 URL 的情况下检查 URL。我相信我应该使用 Zend Cache 来做到这一点?但我不知道从哪里开始,您有什么建议、简单的解决方案或一些基本教程要学习吗?谢谢!

【问题讨论】:

    标签: caching zend-framework2 zend-cache


    【解决方案1】:

    为缓存服务添加全局配置,如here:

    config/autoload/global.php

    'service_manager' => array(
         'abstract_factories' => array(
                'Zend\Cache\Service\StorageCacheAbstractServiceFactory',
          )
    ),
    

    config/autoload/cache.global.php

    return array(
        'caches' => array(
             // Cache config
        )
    )
    

    使用工厂创建您的 View Helper:

    Application/Module.php::getViewHelperConfig()

    'LinkHelper' => function ($sm) {
         $locator = $sm->getServiceLocator();
         return new LinkHelper($locator->get('memcached'))
    }
    

    在 View Helper 中使用缓存服务:

    LinkHelper.php

    protected $cache;
    
    public function __construct($cache) 
    {
        $this->cache = $cache;
    }
    
    public function __invoke($url) 
    {
        $cacheKey = md5($url);
    
        if ($this->cache->hasItem($cacheKey) {
             return $this->cache->getItem($cacheKey);
        }
    
        $link = ''; // Parse link
        $this->cache->setItem($cacheKey, $link);
    
        return $link;
    }
    

    【讨论】:

    • 我收到了这个错误(我按照您的说明使用了链接配置):未捕获的异常 'Zend\Cache\Exception\ExtensionNotLoadedException' 带有消息 'Need ext/memcached version >= 1.0.0'
    • 如果你没有memcached,那么你可以使用filesystem缓存。您可以看到here 的配置示例。并且不要忘记使data/cache 目录可写!
    • 太棒了!看起来现在没有错误,但我如何测试它是否真的有效?
    • 只需更改检查外部 URL 的机制,并确保该值保持旧(应该从缓存中接收)。您也可以检查您的data/cache 目录 - 在这里您会看到一些文本文件
    • 是的,看起来我在 /cache 中有一个文件夹,其中每个检查的 url 都有一个 .dat 文件。所以我知道用 setItem($cacheKey, $link) 创建一个包含 $link 的 $cacheKay.dat 文件的子文件夹?是否可以只有一个文件,而不是里面的所有链接?或者,至少,将所有这些文件放在同一个子文件夹中?
    猜你喜欢
    • 2010-11-13
    • 2011-01-14
    • 2012-07-24
    • 1970-01-01
    • 2019-01-21
    • 2010-10-12
    • 1970-01-01
    • 2021-10-05
    • 2015-11-29
    相关资源
    最近更新 更多