我知道我可以使用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()。但是还没试过。
答案 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://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html