1

EDIT CircumflexはehcacheのgetKeys
に アクセスするため、キャッシュプラグインの実装がgetKeysを公開していれば、Playでも同様のことが可能です。これは不可能な場合があります(すべてのキャッシュライブラリがキャッシュ内のすべてのキーをクエリする手段を提供すると想定します)。

オリジナル EhCacheのキープレフィックスでキャッシュエントリを削除する方法はありますか?

デフォルトでEhCacheを使用するPlayフレームワークのキャッシュ実装を使用しています。

Play 2 Scala Cache.scalaを見ると、削除するキーである文字列を受け取るremoveメソッドがありますが、EhCache自体がプレフィックスによる削除をサポートしているかどうか疑問に思っています(サポートしている場合は、2.1スナップショットのPlay開発者に機能リクエストを行います)。

現状では、一般的なキャッシュキーのリストを取得し、一致するものを削除するヘルパーメソッドを使用しています。

object clear {
  def apply(key: String, keys: List[String] = List()) = {
    if(keys.size > 0) keys.filter(_.startsWith(key)) map(Cache.remove(_))
    else Cache.remove(key)
  }
}

ただし、固定キーのリストを維持することは、キープレフィックスを直接キャッシュ削除に渡すことと比較してばかげています。

4

2 に答える 2

5

EHCache プラグインによると、CacheManager.create()静的メソッドを使用するだけで、EHCache に直接アクセスすることもできます。

net.sf.ehcache.Cache cache = net.sf.ehcache.CacheManager.create().getCache("play");

このcreate()メソッドは、存在する場合、既存のインスタンスを返します。

于 2012-10-07T13:09:26.917 に答える
2

残念ながら、Play での EhCache の現在の実装は非常に基本的なものでput cache entryあり、 や などの操作に限定されていdelete cache entryます。残念。

一方、EhCache は、カスタム フィールドやインデックスなどで検索可能にするなど、キャッシュ エントリを管理するためのより高度な方法を提供するため、http://ehcache.org/documentation/apis/searchを作成できます。

もちろん、そのまま Play に実装されていれば素晴らしいことですが開発者の視点は想像できます私の推測と私はそれに同意します。

したがって、この場合の最善策は、Play 用の新しいモジュールを作成することです。それをCachePlusと呼びましょう。これは、必要に応じて EC の機能を組み込むものです。とにかく、誰かがそれを開始して他の人と共有する必要があります:)

于 2012-10-07T12:59:01.913 に答える