0

根据 Play 2文章,有一些方法可以设置缓存,包括缓存超时(在 API 规范中),但是我需要能够根据需要手动使整个缓存过期,有没有办法做到这一点?特别是,我使用Cached, 不是Cache为了缓存 HTTP 响应

  def get(key: String) = Cached("key-" + key, duration = 3600) {
    Action {
      Ok(some_method)
    }
  }
4

4 回答 4

4

在 play2.1 你可以做Cache.remove("item.key")

升级到 RC1 不是主要的,而且看起来和 2.0.4 一样稳定。

于 2012-11-26T20:45:28.657 回答
2

Play 2 的当前缓存 API 是……非常综合的。

似乎唯一的方法(我也在使用)是设置秒null值:0

Cache.set("item.key", null, 0)

编辑

实际上,在 Java Cached API 中,我从来没有很好地工作过,不知道为什么,也许我忽略了一些东西,所以我Cache在动作中使用 common 来缓存它Result

public static Result index() {
    Result cachedResult = (Result) Cache.get("applicationIndex");
    if (cachedResult == null) {
        Result res = ok(index.render("Ready " + Math.random()));
        Cache.set("applicationIndex", res, 5);
        cachedResult = res;
    }
    return cachedResult;
}

因此,使用以前的示例,您可以使用以下方法使其无效:

Cache.set("applicationIndex", null, 0)
于 2012-11-26T18:27:18.233 回答
0

您可以使用这个 play memcached 模块并运行您自己的memcached 服务器。那有一个 api 可以手动使整个缓存过期。在生产中,此设置还为您提供了具有持续重启的缓存和一些有用的缓存统计信息的额外好处。

于 2012-11-27T01:33:20.637 回答
0

如果您仍然遇到使用“缓存”而不是“缓存”无效的问题,请尝试以下两行代码:

Cache.remove("item.key")
Cache.remove("item.key" + "-etag")

Cached 还需要删除“-etag”缓存对象。

于 2014-09-03T11:30:28.833 回答