我知道我可以使用的ColdFusion緩存API來清除數據,例如:使用cacheGetSession對象清除自定義緩存有更快的方法嗎?
<cfset cacheName = "custom">
<cfset ids = cacheGetAllIds(cacheName)>
<cfset cacheRemove(arrayToList(ids), false, cacheName)>
但在實踐中檢索所有的ID(即cacheGetAllIds()
)做刪除慢(例如秒)。我在想如果我完全開始以毫秒爲單位發生這種情況,應該有辦法。在我的特殊情況下,自定義緩存是磁盤持久性的,磁盤上可能是100兆字節。
我懷疑有一種更快的方法來使用cacheGetSession()
上的方法來清除這個問題,或許可以結合ColdFusion API。因此,詢問是否有人知道如何做到這一點,和使ColdFusion同時開心,然後我開始在自己的引擎蓋下查看。
更新
看起來有可能使用cacheGetSession(cacheName,真).removeAll(),因爲返回的對象是net.sf.ehcache.Cache類型,它實現net.sf.ehcache.Ehcache的。這個接口指定了一個方法removeAll()。儘管如此,還沒有嘗試過。
cacheGetAllIds()是瓶頸 - 事實上,如果你看一下緩存對象的API文檔getKeys()它描述的算法進行檢索的O (n)爲每1000個條目8ms,我看到的速度較慢 - 對於10,000個條目,2000ms +。 – orangepips 2010-11-04 21:29:02
會設置cacheSetProperties({maxElementsInMemory = 0,cacheName)然後將其恢復到大小工作? – Henry 2010-11-04 23:19:58
對於設置屬性有趣的想法+1。 – orangepips 2010-11-05 19:00:09