Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php zend framework中的内存中脚本缓存后端_Php_Zend Framework_Zend Cache - Fatal编程技术网

Php zend framework中的内存中脚本缓存后端

Php zend framework中的内存中脚本缓存后端,php,zend-framework,zend-cache,Php,Zend Framework,Zend Cache,我正在寻找内存中脚本缓存的解决方案,使用Zend_缓存和Zend框架 在我们的应用程序中有一些情况,为了显示一个包含100个元素的表,逻辑如下所示: 从内容表中获取100项(单个查询) 对于每个项目,从db/memcache后端获取创建者用户和批准内容的用户(通常通过for循环完成) 在大多数情况下,批准内容的用户是2或3个管理员用户,但是脚本多次调用数据库/memecache。更糟糕的是,用户模型必须查询3个不同的表才能知道用户属于哪个角色,以及他也属于哪个社区 总之,要显示一个包含100

我正在寻找内存中脚本缓存的解决方案,使用
Zend_缓存
和Zend框架

在我们的应用程序中有一些情况,为了显示一个包含100个元素的表,逻辑如下所示:

  • 从内容表中获取100项(单个查询)
  • 对于每个项目,从db/memcache后端获取创建者用户和批准内容的用户(通常通过for循环完成)
在大多数情况下,批准内容的用户是2或3个管理员用户,但是脚本多次调用数据库/memecache。更糟糕的是,用户模型必须查询3个不同的表才能知道用户属于哪个角色,以及他也属于哪个社区

总之,要显示一个包含100项的表,我们需要查询数据库(或memcache服务器)600次:-)

我在这里考虑了两种解决方案:

  • 不在循环中查询用户表。循环100个项目,获取所有用户ID,并在单个查询中获取所有用户。我不确定这是否是一个好的解决方案,因为这意味着我必须编写sql连接,导致模型函数返回一个非
    Zend\u Db\u Table\u行
    ,这是我们经常使用的

  • 另一种解决方案是在第一次加载时将用户对象保存到内存缓存数组中,下次循环尝试读取用户id时,它将首先在这个“特殊”内存缓存中查找。我正在考虑使用
    Zend_Registry
    作为缓存后端,类似于这里的解决方案:

我们确实使用memcache服务器,但是脚本只是查询memcache服务器几百次,而不是查询mysql数据库。查询memcache服务器更快,但是,由于脚本已经加载了这些数据,我希望使用脚本“内存”,而不是查询外部服务器。

看看,它有一个实现。在查看代码时,它的工作方式应该有一点不同(例如,没有TTL,test()返回布尔值),但这对您来说已经足够了。没有测试

编辑:


因为Zend Framework 2有一个实现:

您不能在一个查询中完成所有这一切吗?获取记录,谁创建了记录,谁批准了记录?如果我在Zend_Db_表中使用联接,fetchAll()函数将不会返回结果,因为表的行类模型会显示一些代码,让我们看看。因为从你的帖子我看不出你为什么不能那样做。很容易加入Zend_Db,结果仍然是一个表行。我/我们可能缺少一些东西,这就是为什么你应该发布代码的原因。谢谢链接。几天前,我发现了一个类似于此实现的类,并添加了单元测试、文档,并在github中发布了它。Aporat,我再也找不到存储库了。你把它拿走了吗?