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

これを処理する 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 に答える