CacheGetSessionオブジェクトを使用してカスタムキャッシュをクリアするより速い方法はありますか?
-
29-09-2019 - |
質問
ColdFusion Cache APIを使用してデータをクリアできることを知っています。
<cfset cacheName = "custom">
<cfset ids = cacheGetAllIds(cacheName)>
<cfset cacheRemove(arrayToList(ids), false, cacheName)>
しかし、実際にはすべてのIDを取得します(つまり、 cacheGetAllIds()
)削除を行うには遅い(例:秒)。私がこれをミリ秒単位で実現するために完全にやり直しているなら、私が考えているのは方法があるべきだと思っています。私の特定のケースでは、カスタムキャッシュはディスクの持続性があり、ディスク上の100メガバイトになる可能性があります。
メソッドを使用してこれをクリアするためのより速い方法があると疑っています cacheGetSession()
, 、おそらくColdFusion APIと組み合わせて。だから誰かがこれを行う方法について何らかの知識を持っているかどうかを確認するように頼む、 と 私がフードの下を自分で見始める前に、ColdFusionを同時に幸せにしてください。
アップデート
使用できるように見えます キャシェットセッション(cachename、true).removeall()返品されたオブジェクトがタイプであるため net.sf.ehcache.cache, 、それを実装します net.sf.ehcache.ehcache. 。このインターフェイスは、メソッドremoveall()を指定します。まだ試していません。
解決
これはそれをします:
cacheGetSession(cacheName, true).removeAll()
約10k以上のレコードで60ミリ秒で返されました。
参考までに:cachgetsession()はcoldfusion 9.0.1機能です
他のヒント
私はこれをテストしていませんが、これはより速いですか?念のため ArrayToList()
ボトルネックです。
<cfloop index="cache" array="#cacheGetAllIds(cacheName)#">
<cfset cacheRemove(cache, false, cacheName)>
</cfloop>
パフォーマンスが本当に問題である場合、バグレポートを提出しますか? http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html