我正在寻找内存脚本缓存的解决方案,使用Zend_Cache
和zend框架。
我们的应用程序中有一些情况,为了显示一个表,比方说100个元素,逻辑如下:
在大多数情况下,批准内容的用户是2或3个管理员用户,但脚本会多次调用数据库/ memecache。它变得更糟,因为用户模型必须查询3个不同的表以了解用户所属的角色以及他也属于哪个社区。 p>
总而言之,要显示100个项目的表,我们查询数据库(或memcache服务器)600次: - )
我在想这里有两个解决方案:
不查询循环内的users表。循环遍历100个项目,获取所有用户ID并在单个查询中获取所有用户。我不确定这是一个很好的解决方案,因为它意味着我将不得不编写sql连接,导致模型函数返回非Zend_Db_Table_Row
,我们大量使用它。
另一个解决方案是在第一次加载时将用户对象保存到内存缓存数组中,下次循环尝试读取用户ID时,它将首先在内存缓存中的“特殊”中查找。我在考虑使用Zend_Registry
作为缓存后端,类似于此处的解决方案:http://sameerparwani.com/posts/using-zend_registry-as-a-zend_cache-backend
我们确实使用了memcache服务器,但是脚本只是查询memcache服务器几百次而不是查询mysql数据库。查询memcache服务器的速度更快,但是,由于脚本已经加载了这些数据,我想使用脚本“memory”而不是查询外部服务器。
答案 0 :(得分:2)
看看FaZend,有一个实现。在查看代码时,它应该有点不同(例如没有TTL,test()返回一个布尔值),但它可能足够你。未经测试!
修改强>
自Zend Framework 2以来,它有一个实现:Zend\Cache\Storage\Adapter\Memory