为什么不能直接使用Phalcon中的APC后端缓存 - 为什么需要$ frontCache?

时间:2013-04-28 19:06:58

标签: php frameworks phalcon

文档提供了以下APC缓存方法:

//Cache data for 2 days
$frontCache = new Phalcon\Cache\Frontend\Data(array(
    'lifetime' => 172800
));

  $cache = new Phalcon\Cache\Backend\Apc($frontCache, array(
      'prefix' => 'app-data'
  ));

//Cache arbitrary data
$cache->save('my-data', array(1, 2, 3, 4, 5));

//Get data
$data = $cache->get('my-data');

与简单的

简单方法相比,这似乎过于复杂
apc_store('my-data', array(1, 2, 3, 4, 5), 172800);
apc_fetch('my-data');

请说明frontCache和“前缀”键。文档在缓存区域中有一些不足之处。

3 个答案:

答案 0 :(得分:5)

你的方式更简单,但是他们的方式更灵活,例如使用$cache->save代替apc_store你可以快速从使用apc交换到另一个缓存系统,文件,memcached等,通过在一个文件中更改一行或两行代码,而不是通过整个应用程序进行查找和替换。

在您当前的项目中可能并不重要,但如果您在不同的服务器上处理各种不同的项目,它可能会有很大的不同。通过使用抽象,您可以按原样重用代码,即使缓存后端不同。

答案 1 :(得分:2)

您通常不只是想存储“一个值”。您更可能希望在Web应用程序中缓存结果,该结果是在抽象OOP代码的特定层中创建的。

因此缓存本身可以在OOP中进行抽象,并且通常适用于其余代码也是良好的OOP。这就是你所看到的。

更具体一点:

缓存行为通常涉及两个组成部分:

  1. 前端。这可以是任何要缓存的内容。
  2. 后端。这是缓存存储,类似于APC,Memcached或简单文件。
  3. 后端处理与存储引擎的对话。这是您的简单函数实际存储值的地方。

    前端允许抽象真正存储哪些数据。您可以简单地缓存值,您可能希望缓存数据库结果,您可能希望缓存对类方法的调用。所有这些应该对您的应用程序透明,也可能对您的代码透明。但手工处理数据通常没有多大意义。这就是所实施的前端的目的。

    我从Phalcon文档中了解到,没有太多的前端实现,但是有一个接口。所以使用它的方法是检查你想要缓存什么类型的东西,然后实现这个东西的装饰模式,它也实现了这个接口。

    我无法详细说明,因为我对Phalcon本身没有任何经验。

答案 2 :(得分:1)

除了Sven的回答之外,前端还用于定义数据的来源(由开发人员,输出缓冲区等明确定义),以及在将数据存储到后端之前必须如何处理数据。从后端获取它们之后。您可能希望序列化数据或使用转换器(如base64 / json),以独立的方式存储数据。