1

我正在寻找内存脚本缓存、使用Zend_Cache和 zend 框架的解决方案。

我们的应用程序中有几个案例,为了显示一个包含 100 个元素的表格,逻辑如下:

  • 从内容表中获取 100 个项目(单个查询)
  • 对于每个项目,从 db / memcache 后端获取创建者用户和批准内容的用户(这通常通过 for 循环完成)

在大多数情况下,批准内容的用户是 2 或 3 个管理员用户,但是脚本会多次调用数据库/memecache。更糟糕的是,用户模型必须查询 3 个不同的表才能知道用户属于哪个角色,以及他也属于哪个社区。

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

我在这里考虑了2个解决方案:

  • 不要在循环内查询用户表。遍历 100 个项目,获取所有用户 ID 并在单个查询中获取所有用户。我不确定这是否是一个好的解决方案,因为这意味着我必须编写 sql 连接,导致模型函数返回一个Zend_Db_Table_Row我们大量使用的 non 。

  • 另一种解决方案是在第一次加载时将用户对象保存到内存缓存数组中,下次循环尝试读取用户 ID 时,它将首先在内存缓存中的这个“特殊”中查找。我正在考虑Zend_Registry用作缓存后端,类似于这里的解决方案:http: //sameerparwani.com/posts/using-zend_registry-as-a-zend_cache-backend

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

4

1 回答 1

2

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

编辑:

由于 Zend Framework 2 有一个实现:Zend\Cache\Storage\Adapter\Memory

于 2012-04-03T22:45:30.703 回答