我使用 Zend_Cache_Core 和 Zend_Cache_Backend_File 来缓存为访问数据库的模型类执行的查询结果。
基本上,查询本身应该形成用于缓存获得的结果的 id,唯一的问题是它们太长了。Zend_Cache_Backend_File 不会抛出异常,PHP 不会抱怨,但不会创建缓存文件。
我想出了一个根本没有效率的解决方案,将任何执行的查询与自动递增的 id 一起存储在一个单独的文件中,如下所示:
0->>SELECT * FROM table 1->>SELECT * FROM table1,table2 2->>SELECT * FROM table WHERE foo = bar
你明白了;这样我每个查询都有一个唯一的 ID。每当插入、删除或更新完成时,我都会清除缓存。
现在我确定您在这里看到了潜在的瓶颈,对于任何测试,从缓存中保存或获取两个(或三个,我们需要添加一个新的 id)请求都会向文件系统发出。这甚至可能会破坏所有缓存的需要。那么有没有一种方法可以在 php 中生成一个唯一的 id,即更短的表示形式,而不必将它们存储在文件系统或数据库中?