如何从Play缓存(scala)获取对象

时间:2013-12-04 22:14:02

标签: scala caching playframework

如何从Play缓存(scala)获取对象

要设置的代码:

play.api.cache.Cache.set("mykey98",  new Product(98), 0)

获取的代码:

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

我获得了Option对象。如何获取我在第一步中存储的实际Product对象。

1 个答案:

答案 0 :(得分:3)

首先,我建议使用带有类型参数的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,然后更改代码以处理如果密钥不存在将会发生的情况(例如设置默认密钥)。