如何从播放缓存(scala)中获取对象

如何从播放缓存(scala)中获取对象,scala,caching,playframework,Scala,Caching,Playframework,如何从播放缓存(scala)中获取对象 要设置的代码: play.api.cache.Cache.set("mykey98", new Product(98), 0) 要获取的代码: val product1: Option[Any] = play.api.cache.Cache.get("mykey98") 我得到选项对象。如何获取第一步中存储的实际产品对象 首先,我建议使用带有类型参数的Cache.getAs。这样您就不会被选项[Any]所束缚。有几种方法可以做到这一点。在我的示例中

如何从播放缓存(scala)中获取对象

要设置的代码:

play.api.cache.Cache.set("mykey98",  new Product(98), 0)
要获取的代码:

val product1: Option[Any]  = play.api.cache.Cache.get("mykey98")

我得到选项对象。如何获取第一步中存储的实际产品对象

首先,我建议使用带有类型参数的
Cache.getAs
。这样您就不会被
选项[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()
}

在您的特定情况下,将
字符串
替换为
产品
,然后更改代码以处理键不存在时会发生的情况(例如设置默认键)。

应该注意的是,
getOrElse
将在缺少值的情况下将结果值存储回缓存。