gpt4 book ai didi

scala - 使用 Play Framework 的 Cached API 在多语言网站中缓存操作

转载 作者:行者123 更新时间:2023-12-03 12:20:13 24 4
gpt4 key购买 nike

为了在给定的秒数内缓存每个标签和语言的 Action ,我编写了以下辅助方法(其中标签是我给 Action 的名称):

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 不会在每次调用该操作时调用 好像 key 仅在缓存期结束后才被评估。

这是不对的,我想要这个 cacheResponseFor每次我请求我的页面时都会调用该语言,使用 getLanguage 评估语言我得到了正确的缓存版本,即我最终应该得到 2 个缓存 Action (每种语言一个)。

我错过了什么吗?

最佳答案

我不知道您面临的问题是什么,但我做了一个小的概念验证,根本没有问题。

package controllers

import play.api.cache.Cached
import play.api.mvc.{Action, Controller, EssentialAction, RequestHeader}

object Caches {
import play.api.Play.current

def cacheResponseFor(label: String, duration: Int)(action: EssentialAction) = {
Cached({r: RequestHeader => label + getLanguage(r)}, duration){ action }
}

def getLanguage(request: RequestHeader): String = {
request.cookies
.get("language")
.map(_.value)
.getOrElse("fr")
}
}

class CachedApplication () extends Controller {

import Caches._

def index = cacheResponseFor("homePage", 60) {
Action { implicit req =>
getLanguage(req) match {
case "fr" =>
Ok("Bonjour le monde")
case _ =>
Ok("Hello world")
}
}
}
}

关于scala - 使用 Play Framework 的 Cached API 在多语言网站中缓存操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33319654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com