将doctrine2实体保存到缓存以加快页面加载

Opt*_*mus 9 memcached caching zend-framework doctrine-orm

假设我有一个被调用的Product实体,每次用户点击产品信息页面时都会加载该实体.通常我会将对象保存在Zend_Cache(memcache)中一小时,以避免为每个请求命中数据库,但据我所知,由于Proxy对象,Doctrine2实体无法实现.

所以我的问题是,如何避免为每个请求从数据库中加载相同的实体?

[编辑]

我试过像这样使用Doctrine Cache

    $categoryService = App_Service_Container::getService('\App\Service\Category');
    $cache = $categoryService->getEm()->getConfiguration()->getResultCacheImpl();
    $apple = $cache->fetch('apple');
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误

警告:require(App/Entity/Proxy/_ CG _ /App/Entity/Category.php)[function.require]:无法打开流:/ opt/vhosts/app/price/library /中没有此类文件或目录第163行的Doctrine/Common/ClassLoader.php

这与Zend Cache相同,并且由于Proxy类,您无法序列化实体

tim*_*dev 3

您有多种选择:

  1. 使用 Doctrine 的内置结果缓存
  2. 尝试通过 Zend_Cache 将实体粘贴到内存缓存中。当您将其拉出时,您可能需要将 Product 合并回 EM,以便可以取消引用代理。如果您提取加入任何需要显示产品信息的关联,并且您只进行读取,那么这应该可以正常工作。
  3. 根本不缓存实体。缓存您生成的任何输出。

编辑:如果您不关心水合开销,您正在使用 mysql,并且您的产品和关联表不经常更改,您可能更愿意仅依赖 mySQL 查询缓存。这是一个相当生硬的对象,但值得一提。