修改
Circumflex访问ehcache's getKeys,因此应该可以在Play中执行类似操作,前提是Cache插件实现公开了getKeys,这可能是不可能的(假设每个Cache库都提供了一种查询缓存中所有键的方法) )
ORIGINAL 有没有办法通过EhCache的键前缀删除缓存条目?
我正在使用Play框架的缓存实现,默认情况下使用EhCache。
看看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
相比,维护固定密钥列表是愚蠢的答案 0 :(得分:5)
根据EHCache plugin,您还可以直接访问EHCache,只需使用CacheManager.create()静态方法:
net.sf.ehcache.Cache cache = net.sf.ehcache.CacheManager.create().getCache("play");
create()
方法返回现有实例(如果存在)。
答案 1 :(得分:2)
不幸的是,目前在Play中实现EhCache是非常基本的,它仅限于put cache entry
和delete cache entry
等操作。可惜。
另一方面,EhCache提供了更复杂的方法来管理缓存条目,包括使其可以通过自定义字段,索引等进行搜索,因此可以创建http://ehcache.org/documentation/apis/search。
当然,如果它是在Play 开箱即用的中实现的,那就太棒了,但我可以想象开发人员的观点:'使每个功能都使用子系统在Play中可用会破坏框架的轻盈' - 这是我的猜测,我同意这一点。
在这种情况下,最好的方法就是为Play创建一个新模块,让我们称之为 CachePlus ,它将根据需要包含EC的功能。无论如何某人必须启动它并与其他人分享:)