有没有更快的方法来清除使用cacheGetSession对象的自定义缓存?

时间:2010-11-04 17:34:07

标签: coldfusion ehcache coldfusion-9

我知道我可以使用ColdFusion缓存API来清除数据:

<cfset cacheName = "custom">
<cfset ids = cacheGetAllIds(cacheName)>
<cfset cacheRemove(arrayToList(ids), false, cacheName)>

但实际上检索所有id(即cacheGetAllIds())以进行删除很慢(例如秒)。在我认为应该有一种方法,如果我完全重新开始在毫秒内发生这种情况。在我的特定情况下,自定义缓存是磁盘持久性的,在磁盘上可以是100兆字节。

我怀疑有更快的方法可以使用cacheGetSession()上的方法清除它,也许与ColdFusion API结合使用。因此,在我开始深入了解之前,先询问某人是否知道如何执行此操作, 让ColdFusion同时感到高兴。

更新

看起来可以使用cacheGetSession(cacheName,true).removeAll(),因为返回的对象是net.sf.ehcache.Cache类型,它实现了net.sf.ehcache.Ehcache。此接口指定方法removeAll()。但是还没试过。

2 个答案:

答案 0 :(得分:3)

这样做:

cacheGetSession(cacheName, true).removeAll()

大约10K +记录,它在60毫秒内返回。

FYI:cachGetSession()是ColdFusion 9.0.1函数

答案 1 :(得分:1)

我没有测试过这个,但是这个更快吗?以防ArrayToList()是瓶颈。

<cfloop index="cache" array="#cacheGetAllIds(cacheName)#">
    <cfset cacheRemove(cache, false, cacheName)>
</cfloop>

参考:http://www.aaronwest.net/blog/index.cfm/2009/11/28/14-Days-of-ColdFusion-9-Caching-Day-12--Removing-All-Items-in-Cache

如果性能确实是您的问题,请提交错误报告? http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html