我对从 CF8 到 9 的更改视而不见,如果不创建自定义缓存或其他一些不值得努力的剧烈变通方法,就无法再写入磁盘缓存。
目前,我已经放弃尝试将应用程序转换为支持(如果可能)将缓存文件的内容写入静态 cfm 文件的相同方法。我现在更加好奇,因为我已经深入研究了它。我正在寻找比我自己更有经验的人。
我想了解或知道如何处理模板缓存的是:
- 能够在默认或自定义缓存中定位模板并刷新它而不清除整个缓存。
- 出于好奇或调试方法查看或解析特定缓存模板的内容。
这是我正在使用的代码,需要 CF 9.0.1,因为我相信由于添加了 EhCache 2.0,一些缓存功能在 9.0 中不可用。
<cftry>
<cfcache action='serverCache' timeout='#CreateTimeSpan(0,0,0,10)#' stripwhitespace='true'
usequerystring='true'>
Stuff to cache.
<br/>
<cfoutput>#now()#</cfoutput>
<br/>
</cfcache>
<!--- Get the cached contents --->
<cfdump var="#cacheGetProperties()#">
<cfdump var="#getAllTemplateCacheIds()#">
<!---Locate a single cached item --->
<cfscript>
cacheArray = getAllTemplateCacheIds();
WriteOutput("Before<br/>");
for(i=1;i LTE ArrayLen(cacheArray);i=i+1)
{
writeOutput(cacheArray[i] & "<br/>");
if(FindNoCase(scriptPath, cacheArray[i]))
{
//expect only to find min and max one per string so no need to worry about out of bounds
cacheIDSubStr = REFind("[a-fA-F\d]{32}(?=_LINE:\d*$)",cacheArray[i],1,1);
cacheID = Mid(cacheArray[i],CacheIDSubStr.pos[1],CacheIDSubStr.len[1]);
//Failure to delete cache expected fireworks
//WriteOutput(cacheID&"<br/>");
//cacheObject = CacheGet(cacheID);
//CacheRemove(cacheID);
templateCache = cacheGetSession("template");
//Tooling around with the exposed guts of cacheGetSession
WriteDump(templateCache.getKeys());
}
}
</cfscript>
<cfcatch type="Any">
<cfscript>
writeoutput("Error:" & cfcatch.message);
</cfscript>
</cfcatch>
</cftry>
不应该存在错误,但它是从原始编辑到这里发布的。