2012-11-26 14 views
0

每播放2 article,有办法设置缓存包括缓存超时(在API规范中),但是我需要能够手动过期整个缓存的需要,是有办法做到这一点?特别是,我使用Cached,不Cache缓存HTTP响应这样如何手动过期播放2缓存

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

回答

2

播放2的电流缓存API是...非常合成。

看来,唯一的办法(即我还使用)可以0秒设置null值:

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

编辑

其实在Java中缓存 API从未工作过我很好,不知道为什么,也许我忽略了一些东西,所以我使用常见的Cache来缓存它的动作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) 
+0

我会试一试,让你知道它是否有效,谢谢! – Bob

+0

它在2.0.x中工作,但是伊万提到用Play 2.1构建新应用程序及其新的可能性会更好。最有可能的开发团队将释放稳定版本(只是我的希望),然后再下一系列的应用程序将生命:) – biesior

+0

其实这不适用于我的代码,我使用'缓存',而不是'缓存'。查看更新的问题。 – Bob

4

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

这不是主要的升级到RC1,似乎只是为稳定如2.0.4。

+0

好主意,除了我还没有使用2.1。 – Bob

0

您可以使用此播放memcached module并运行您自己的memcached server。这有一个API来手动过期整个缓存。在生产中,这个设置还为您提供了一个额外的好处,即拥有一个保持重新启动的缓存和一些有用的缓存统计信息。

0

的情况下,你仍然有“缓存”,而不是“高速缓存”无效问题,请尝试的这两行代码:

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

缓存需要“-etag”缓存对象也将被删除。