如何从Play缓存(scala)中获取对象
要设置的代码:
play.api.cache.Cache.set("mykey98", new Product(98), 0)
要获取的代码:
val product1: Option[Any] = play.api.cache.Cache.get("mykey98")
我得到Option对象。如何获得我在第一步中存储的实际产品对象。
首先,我建议使用Cache.getAs
,它接受一个类型参数。这样你就不会被Option[Any]
卡住了。有几种方法可以做到这一点。在我的示例中,我将使用String
,但它与任何其他类的工作原理相同。我喜欢的方式是通过模式匹配:
import play.api.cache.Cache
Cache.set("mykey", "cached string", 0)
val myString:String = Cache.getAs[String]("mykey") match {
case Some(string) => string
case None => SomeOtherClass.getNewString() // or other code to handle an expired key
}
对于模式匹配,这个例子有点过于简化了,但我认为当需要根据键的存在来分支代码时,这是一个更好的方法。您也可以使用Cache.getOrElse
:
val myString:String = Cache.getOrElse[String]("mykey") {
SomeOtherClass.getNewString()
}
在您的特定情况下,将String
替换为Product
,然后更改代码以处理如果密钥不存在会发生的情况(例如设置默认密钥)。