2014-02-05 74 views
0

我有一些對象存儲在緩存中通過putCache() 緩存中的對象的超時時間爲10分鐘。組件銷燬期間的清理(ColdFusion)

這些對象在所有用戶之間共享。但是,有2-3個依賴於用戶的變量。 當前,每個對象都將這些依賴於用戶的變量存儲在用戶會話中。

問題:

當組件從高速緩存器10分鐘,用戶會話中的變量不被刪除之後去除。 因此,也許後12分鐘的對象再次創建,並會寫入2個新變量的用戶會話
注:每個對象將創建會話範圍結構與唯一的名稱。舊的變量不能被覆蓋,因爲新的對象不知道前一個對象的結構名稱。

示例:對象是「list.cfc」,可以有20個不同的列表,每個列表存儲完全不同的數據。在會話中,我們只存儲當前用戶的「list_position」 list_items存儲在緩存中,對所有用戶都是一樣的。

我們希望在對象被銷燬時清理會話變量。如何才能做到這一點?

這個想法:在PHP中,我會使用__destruct()方法,但我在ColdFusion中找不到這個方法。

+1

您是否考慮將這些對象存儲在應用程序或服務器範圍中,以便它們不必被重新創建而銷燬? –

+0

@DanBracuk是的,但我們不能改變這一點。有超過100個應用程序正在運行(每個應用程序最多有200個會話),每個應用程序有幾千個對象。一個特定的模塊只能使用大約一百個對象,因此當用戶更改模塊時,我們使用緩存來釋放內存 – Philipp

回答

2

當然,最簡單的方法是抽象會話變量的命名,以便您直接引用它們can。 EG:聽起來像你目前有這個:

// in Cache.cfc 
// [...] 
someVarInTheCache = sessionReference[uniqueKey] 

而你的對象不知道那個鍵?

難道你們就不能只是這樣做:

someVarInTheCache = sessionReference.someVarRepresentingTheCache[uniqueKey] 

然後當你殺死緩存,你只要殺session.someVarRepresentingTheCache,也不需要知道的關鍵。