Playframework 2.0 按前缀删除缓存项

Playframework 2.0 按前缀删除缓存项,playframework-2.0,ehcache,prefix,Playframework 2.0,Ehcache,Prefix,编辑 如果缓存插件实现公开getKeys,那么扬抑访问应该可以在游戏中进行类似的操作,这可能是不可能的(假设每个缓存库都提供了一种查询缓存中所有键的方法) 原创 有没有一种方法可以使用EhCache通过键前缀删除缓存项 我使用的是Play framework的缓存实现,默认情况下使用EhCache 查看Play 2 Scala Cache.Scala,我看到一个remove方法,该方法使用一个字符串,即要删除的键,但我想知道EhCache本身是否支持按前缀删除(如果支持,我将向Play devs

编辑
如果缓存插件实现公开getKeys,那么扬抑访问应该可以在游戏中进行类似的操作,这可能是不可能的(假设每个缓存库都提供了一种查询缓存中所有键的方法)

原创 有没有一种方法可以使用EhCache通过键前缀删除缓存项

我使用的是Play framework的缓存实现,默认情况下使用EhCache

查看Play 2 Scala Cache.Scala,我看到一个remove方法,该方法使用一个字符串,即要删除的键,但我想知道EhCache本身是否支持按前缀删除(如果支持,我将向Play devs for 2.1 snapshot发出功能请求)

目前,我使用的是一个helper方法,它获取一个公共缓存键列表并删除匹配项:

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

但是,与直接将任何密钥前缀传递到缓存移除相比,维护固定密钥列表是愚蠢的

不幸的是,当前EhCache在用的实现非常基本,它仅限于像
放置缓存条目
删除缓存条目
这样的操作。可怜

另一方面,EhCache提供了更复杂的管理缓存项的方法,包括通过自定义字段、索引等进行搜索,因此可以创建缓存项

当然,如果它是在开箱即用的情况下实现的,那就太棒了,但我可以想象开发人员的观点:“让子系统使用的每个功能在游戏中都可用会破坏框架的轻巧性”——这是我的猜测,我同意这一点


因此,在这种情况下,最好的办法就是创建一个新的播放模块,我们称之为CachePlus,它将根据需要结合EC的功能。无论如何,必须有人启动它并与其他人共享:)

不幸的是,当前EhCache的实现非常基本,并且它仅限于
放置缓存条目
删除缓存条目
等操作。可怜

另一方面,EhCache提供了更复杂的管理缓存项的方法,包括通过自定义字段、索引等进行搜索,因此可以创建缓存项

当然,如果它是在开箱即用的情况下实现的,那就太棒了,但我可以想象开发人员的观点:“让子系统使用的每个功能在游戏中都可用会破坏框架的轻巧性”——这是我的猜测,我同意这一点

因此,在这种情况下,最好的办法就是创建一个新的播放模块,我们称之为CachePlus,它将根据需要结合EC的功能。无论如何,必须有人启动它并与其他人共享:)

根据,您还可以直接访问EHCache,只需使用静态方法:

net.sf.ehcache.Cache cache = net.sf.ehcache.CacheManager.create().getCache("play");
create()
方法返回现有实例(如果存在)。

根据,您还可以直接访问EHCache,只需使用静态方法:

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

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

它可能是最小的,因为它必须支持任何缓存实现,而不仅仅是EhCache——不确定Redis等人是否支持getKeys访问器,但如果是这样,如果Play公开该方法就更好了!(我发布到Play用户组,在那里它很可能会在帖子的海洋中迷失…)在我看来,这是一出好戏!团队应该使用一个简单的包装器方法(比如getWrappedCacheObject())扩展特性“CacheAPI”,该方法返回原始的缓存对象。用户可以将其强制转换为EhCache或其他任何内容,并使用原始实现的所有功能,或者用户不使用原始缓存对象来保持干净和独立于缓存实现。每个人都会快乐的。:-)它可能是最小的,因为它必须支持任何缓存实现,而不仅仅是EhCache——不确定Redis等人是否支持getKeys访问器,但如果是这样,如果Play公开了该方法就好了!(我发布到Play用户组,在那里它很可能会在帖子的海洋中迷失…)在我看来,这是一出好戏!团队应该使用一个简单的包装器方法(比如getWrappedCacheObject())扩展特性“CacheAPI”,该方法返回原始的缓存对象。用户可以将其强制转换为EhCache或其他任何内容,并使用原始实现的所有功能,或者用户不使用原始缓存对象来保持干净和独立于缓存实现。每个人都会快乐的。:-)不错的Nico,但是如果可能的话,我想直接使用play Cache插件。所以你必须编写自己的缓存插件:正如@biesior所说,目前play Cache API只包含
set
get
remove
Nico,但是如果可能的话,我想直接使用play Cache插件。所以你必须编写自己的缓存插件:正如@biesior所说,目前play Cache API只包含
set
get
remove