让我们总结一下您的问题。你想缓存查询结果,怎么做?
在回答问题之前,您要提出解决方案(存储在平面文件中)。所以当然,你可以做到这一点。但是,如果您要创建一点基础设施,为什么不编写一个缓存数据类并缓存各种东西。它可以有3个属性
-- 缓存项名称 -- 缓存项值 -- 缓存项上次更新时间戳
添加几个功能
function loadCachedData($itemName);
//see if more time has passed than in the cache expiration window
function isLoadedDataFresh($expirationWindowInSeconds);
function getLoadedItemValue();
function storeCacheValueForItem($itemName, $value);
您已经必须编写查询来选择您的项目,因此在您的控制器中,只需执行以下操作:
$cacheHandle = new Cache();
$cacheHandler->loadCachedData('whateverMyVarIs');
$displayValue = '';
if($cacheHandler->isLoadedDataFresh(60 * 60 * 24) ) //sec*min*hour = 1 day
{
$displayValue = $cacheHandler->getLoadedItemValue();
}
else
{
//update the display value here with your real query
$displayValue = doMyStuff();
$cacheHandler->storeCacheValueForItem('whateverMyVarIs', $displayValue);
}
当然,您必须彻底清除该代码,将到期时间窗口转换为常量,并实现该类,但这应该不会太难。另外,你已经有一个 db.. 只需用它返回缓存类,然后缓存!或者,如果您想使用更好的工具进行快速缓存,请使用 memcached!http://www.danga.com/memcached/
但最后,我只需要问...您是否过早优化?有人真的抱怨过这个页面的表现吗?