为了对给定的标签和语言缓存操作一段时间,我编写了以下帮助方法(其中label是我为我的操作命名的名称):
def cacheResponseFor(label: String, duration: Int)(action: EssentialAction) = {
Cached({r: RequestHeader => (label + getLanguage(r))}, duration){ action }
}
def getLanguage(request: RequestHeader): String = {
request.cookies
.get(helpers.SessionHelpers.LANGUAGE_SESSION)
.map(_.value)
.getOrElse(helpers.LanguageHelpers.FRENCH)
}
但是我遇到了一些奇怪的问题,当我尝试将一个Action
缓存60秒,并在此期间从法语切换到英语等其他语言时,我仍然会在60秒内获得法语版本,然后才会切换到英文。
经过调查,我发现getLanguage
方法并没有在每次调用该操作时都被调用,好像只有在缓存周期结束后才会对键进行评估。
这不对,我希望每次请求页面时都会调用cacheResponseFor
,使用getLanguage
来评估语言,并获取正确的缓存版本,即我应该最终获得两个缓存操作(每种语言一个)。
我有遗漏什么吗?