【问题标题】:Zend Cache Exist FunctionZend 缓存存在函数
【发布时间】:2014-04-15 12:01:11
【问题描述】:

我在当前项目中使用 Zend Cache,它工作正常。
但我希望它工作得更快,所以我想在使用 zend 缓存的加载功能之前检查缓存是否存在。
以下是我的代码:

$cache = Zend_Registry::get('cache');

if(!$result = $cache->load('firstfile')) {
    $newArray = 'firstfile';
    $cache->save($newArray, 'firstfile');
} else {

    echo 'retrieving cache data';
    Zend_Debug::dump($result);
}

我阅读了zend缓存的文档。它说我们只使用这种方式加载来检查缓存是否存在。我想知道是否还有其他可用的 zend 缓存功能,例如 hasCached 或类似的东西,因此我们可以在使用加载功能之前使用它来检查缓存是否存在。

在此先感谢... :)

【问题讨论】:

  • 这是您应用程序的瓶颈吗?如果您想为了优化而优化它,请不要。首先 Xhprof 你的应用,看看它是否值得优化。
  • 你好,谢谢你的回复。我想了解zend缓存,而不是优化项目它是关于学习和探索zend,所以有没有可用的zend函数可以检查缓存是否存在......

标签: zend-framework caching zend-cache


【解决方案1】:

恐怕没有这样的功能。

Zend Cache 是对其他几种缓存机制的封装。我对所有这些都不是 100% 熟悉,例如我不知道 Redis 或 XCache 是否提供了一种检查缓存键是否存在的方法。

APC 不存在 - 如果尝试加载缓存条目失败,则密钥不存在。

Memcache 和 Memcached 与上述不同。

在文件缓存的情况下,检查键是否存在涉及文件查找,这本身​​很慢。

同样适用于数据库缓存 - 您需要启动 SQL 查询,这本身相对较慢。

如果底层缓存后端没有检查缓存键是否存在的方法,Zend Cache 没有办法提供它,只能在底层运行 load 函数,这完全违背了目的完全没有hasKey 功能。在“慢”缓存机制的情况下,查找实际上会更慢。

【讨论】:

    【解决方案2】:

    getIds() 函数返回存储的缓存 ID 数组。

    所以我认为你可以尝试这样的事情:

    $id_list =  $cache->getIds();
    if (in_array('firstfile', $id_list)) {
        $result = $cache->load('firstfile');
    }
    

    我没有测试它,只是一个想法。 :)

    【讨论】:

    • 你好doydoy,感谢您的回复。我测试了你的代码,它工作得很好,但是我知道了文件适配器“test”的另一个功能,它在我们保存或加载它之前为我们提供了缓存是否存在。谢谢..:)
    • 你可以通过一次调用优化我的想法(除非新缓存)并将结果放入注册表。即使您更改缓存系统(文件,apc,...),此方法也有效。如果您有其他解决方案,请写出来。 :)
    • 在开始加载后检查缓存是否存在并不是一个好主意,因为在检查和加载之间,缓存可能会过期或被另一个进程删除。顺便提一句。 getIds 返回一个包含所有缓存 id 的数组,这可能非常慢,并且并非所有后端都支持。
    猜你喜欢
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多