【问题标题】:How to manually expire Play 2 cache如何手动过期 Play 2 缓存
【发布时间】:2014-09-03 19:30:28
【问题描述】:

Per Play 2 article,有一些方法可以设置缓存,包括缓存超时(在 API 规范中),但是我需要能够根据需要手动使整个缓存过期,有办法吗那?特别是,我使用Cached,而不是Cache 来缓存HTTP 响应

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

【问题讨论】:

    标签: scala playframework playframework-2.0 ehcache


    【解决方案1】:

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

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

    【讨论】:

    • 好主意,但我还没有使用 2.1。
    【解决方案2】:

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

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

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

    编辑

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

    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)
    

    【讨论】:

    • 它在 2.0.x 中工作,但是正如 Ivan 所说,最好使用 Play 2.1 构建新应用程序,并牢记它的新可能性。开发团队很可能会在下一系列应用程序上线之前发布稳定版本(只是我的希望):)
    • 实际上这不适用于我的代码,我使用的是Cached,而不是Cache。查看更新的问题。
    • 好吧,实际上您确认Cached API 是否有效?检查我的编辑。我不知道 Scala 的情况。
    • 是的 Cached API 在我尝试使用 Cache.set 之前效果很好,将尝试您的新方法。
    【解决方案3】:

    您可以使用此游戏memcached module 并运行您自己的memcached server。那有一个 api 可以手动使整个缓存过期。在生产环境中,此设置还为您提供了额外的好处,即拥有持续重启的缓存和一些有用的缓存统计信息。

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-18
        • 2014-05-11
        • 1970-01-01
        • 2012-06-05
        • 2011-03-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多