我知道我可以使用的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