1

编辑
Circumflex 访问ehcache 的 getKeys,因此应该可以在 Play 中执行类似操作,前提是 Cache 插件实现公开了 getKeys,这可能是不可能的(假设每个 Cache 库都提供了一种查询缓存中所有键的方法)

ORIGINAL 有没有办法通过 EhCache 的键前缀删除缓存条目?

我正在使用默认使用 EhCache 的 Play 框架的缓存实现。

查看 Play 2 Scala Cache.scala 我看到了一个删除方法,它需要一个字符串,即要删除的键,但我想知道 EhCache 本身是否支持按前缀删除(如果是这样,我将向 Play 开发人员提出 2.1 快照的功能请求)

就目前而言,我正在使用一种辅助方法,该方法采用常用缓存键列表并删除匹配项:

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)
  }
}

但是与将任何键前缀直接传递给 Cache remove 相比,维护固定键列表是愚蠢的

4

2 回答 2

5

根据EHCache 插件,您还可以直接访问 EHCache,只需使用CacheManager.create()静态方法:

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

create()如果存在,则该方法返回现有实例。

于 2012-10-07T13:09:26.917 回答
2

不幸的是,当前 EhCache 在 Play 中的实现非常基础,并且仅限于put cache entrydelete cache entry. 遗憾。

另一方面,EhCache 提供了更复杂的方法来管理缓存条目,包括使其可通过自定义字段、索引等进行搜索,因此可以创建http://ehcache.org/documentation/apis/search

当然,如果它在 Play out-of-the-box 中实现,那就太棒了,但我可以想象开发人员的观点:“让 Play 中使用的每个功能子系统都可用会扼杀框架的轻便性”——那就是我的猜测,我同意这一点。

因此,在这种情况下,最好的选择就是为 Play 创建一个新模块,我们称之为CachePlus,它将按需结合 EC 的功能。无论如何,有人必须启动它并与他人分享:)

于 2012-10-07T12:59:01.913 回答