2011-11-25 103 views
1

林不知道這是可能的..沖洗個別緩存頁面片段

我動態生成的錶行,並希望緩存的每一行作爲頁面fragement ..如

<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="..">,但是這會刷新頁面中的所有緩存......我需要能夠刷新頁面中的各個緩存。

非常感謝提前!

傑森

回答

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") 
+0

感謝Jake..worked請客.. – Jason

0

如果您使用的CF9標籤cfcache有一個 「id」 屬性。所以,你可以說,你在你的例子有什麼:

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

+0

喜禾風,感謝您的加入..我用CF9。我以爲我也可以做到這一點,我也嘗試過,但發生錯誤。下次我在那裏時我會有一個遊戲,併發布錯誤.. – Jason