1

我不确定这是否可能..

我正在动态生成表行,并希望将每一行缓存为页面片段..例如

<cfloop index="i" from="1" to="10">
    <cfcache id="tableRow_#i#">
        <tr><td>..some stuff..</td></tr>
    </cfcache>
</cfloop>

然后在其他代码中,在应用程序的完全不同部分,我希望能够刷新单个片段..例如,如果我想刷新'tableRow_2'..

<cfcache action="flush" id="tableRow_3">

谁能告诉我这种粒度是否可行,如果可以,最好的方法是什么。

我能找到的最接近的是<cflush expireURL="..">,但这会刷新页面中的所有缓存。我需要能够刷新页面中的各个缓存。

提前谢谢了!

杰森

4

2 回答 2

1

处理此问题的一种方法是通过应用程序范围的缓存池。例如:

<cfif not IsDefined("application.cachePool")>
  <cfset application.cachePool = {}>
</cfif>

<cfloop index="i" from="1" to="10">
    <!---<cfcache id="tableRow_#i#">--->
    <cfif not StructKeyExists(application.cachePool, "tableRow_#i#")>
        <cfsavecontent variable="cacheTmp"><tr><td>..some stuff..</td></tr></cfsavecontent>
        <cfset application.cachePool["tableRow_#i#"] = cacheTmp>
    </cfif>
    #application.cachePool["tableRow_#i#"]#
    <!---</cfcache>--->
</cfloop>

然后稍后,在应用程序的其他地方,您可以使用 StructDelete:

StructDelete(application.cachePool, "tableRow_3")
于 2011-11-25T17:33:10.467 回答
0

如果您使用的是 CF9,则 cfcache 标记具有“id”属性。因此,您可以准确地说出您在示例中的内容:

<cfcache action="flush" id="tableRow_3">

于 2011-11-28T21:38:16.713 回答