2

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

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

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

我怀疑有一种更快的方法可以使用 on 方法清除它cacheGetSession(),也许与 ColdFusion API 结合使用。因此,在我自己开始深入了解之前,询问是否有人知道如何做到这一点,同时让 ColdFusion 开心。

更新

看起来可能可以使用cacheGetSession (cacheName, true).removeAll() 因为返回的对象是net.sf.ehcache.Cache类型,它实现了 net.sf.ehcache.Ehcache。并且这个接口指定了一个方法removeAll()。虽然还没有尝试过。

4

2 回答 2

3

这样做:

cacheGetSession(cacheName, true).removeAll()

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

仅供参考:cachGetSession() 是 ColdFusion 9.0.1 函数

于 2010-11-05T19:03:16.977 回答
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

于 2010-11-04T20:01:21.930 回答