我想通了,我可以使用上面,如果我做了以下的ARGUMENTS.item
變量之前,我把它傳遞給函數的確切代碼:
<cfquery name="qData" datasource="#VARIABLES.dsn#">
select * from myData
</cfquery>
<!--- Setup and init Java objects --->
<cfset byteArrayOutputStream = createObject("java","java.io.ByteArrayOutputStream") />
<cfset objectOutputStream = createObject("java","java.io.ObjectOutputStream") />
<cfset byteArrayOutputStream.init() />
<cfset objectOutputStream.init(byteArrayOutputStream) />
<!--- Serialize the cfquery object --->
<cfset objectOutputStream.writeObject(qData) />
<cfset serializedQuery = toBase64(byteArrayOutputStream.toByteArray()) />
<cfset objectOutputStream.close() />
<!--- Stick in the cache --->
<cfset myCache.put(myCacheName, key, serializedQuery) />
賓果!之後,serializedQuery
就可以使用,並且可以通過HTTP在線路上傳輸。當您從EHCache中取回時,需要執行以下操作:
<!--- Get result value from cache --->
<cfset cacheData = myCache.get(myCacheName, key) />
<!--- Java objects setup --->
<cfset byteArrayInputStream = createObject("java","java.io.ByteArrayInputStream") />
<cfset objectInputStream = createObject("java","java.io.ObjectInputStream") />
<!--- deserialize --->
<cfset ba = toBinary(cacheData) />
<cfset byteArrayInputStream.init(ba) />
<cfset objectInputStream.init(byteArrayInputStream) />
<cfset deserializedQuery = objectInputStream.readObject() />
<cfset objectInputStream.close() />
<!--- Dump query --->
<cfdump var="#deserializedQuery#" />
這種類型的序列化非常非常快。我可以使用JSON表示理解其他人,但我不確定他們的速度如何。
無論如何,這似乎對我很好。謝謝大家的意見。我希望別人覺得這很有用。
你可以切換到CF9嗎?它有內置的ehcache掛鉤。 – kevink
在cfhttpparam/value中傳遞的值必須是一個字符串 - 無論是文本還是二進制。你將不得不以某種方式序列化arguments.item。 –
@kevink - CF9只允許緩存到本地系統,而不是中央緩存服務器AFAIK。我們正在使用集羣環境。 –