2

私はColdFusionキャッシュAPIを使用してデータを次のようにクリアできることを知っています。

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

しかし実際cacheGetAllIds()には、削除を行うためにすべてのID(つまり)を取得するのは遅い(たとえば秒)。ミリ秒単位でこれを完全にやり直す方法があるはずだと私は考えています。私の特定のケースでは、カスタムキャッシュはディスク永続的であり、ディスク上で数百メガバイトになる可能性があります。

cacheGetSession()おそらくColdFusionAPIと組み合わせて、のメソッドを使用してこれをクリアするより速い方法があるのではないかと思います。ですから、私が内部を調べ始める前に、誰かがこれを行う方法についてある程度の知識を持っているかどうかを確認し、同時にColdFusionを幸せにするように依頼します。

アップデート

返されるオブジェクトはnet.sf.ehcache.Ehcacheを実装するnet.sf.ehcache.Cacheタイプであるため、 cacheGetSession(cacheName、true).removeAll()を使用できる可能性があるようです。そして、このインターフェースはメソッドremoveAll()を指定します。まだ試していません。

4

2 に答える 2

3

これはそれを行います:

cacheGetSession(cacheName, true).removeAll()

約10K以上のレコードで、60ミリ秒で返されました。

参考:cachGetSession()はColdFusion9.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 に答える