使用Spray缓存自动更新缓存

时间:2014-09-08 07:42:11

标签: scala caching spray

我在scala和喷雾缓存方面真的很棒,我需要知道它是如何工作的。 我有数据库,我想要缓存一些表,并更新他们每小时的exmaple。我无法理解它在喷雾缓存库中的实现方式。我觉得写点什么,

val cache: Cache[Double] = LruCache()
def cachedOp[T](key: T): Future[Double] = cache(key) {
//some big function which download table in json array
  getTableFromDb()
}

但不知道它是如何工作的。请帮助我,我想学习和理解。抱歉愚蠢的问题和糟糕的语言。

1 个答案:

答案 0 :(得分:2)

您可以使用timeToLive属性配置缓存,使其不会超过1小时的任何条目。

import scala.concurrent.duration._

val cache: Cache[Double] = LruCache(timeToLive = 1 hour)

1小时后,该值将自动从缓存中逐出。

这意味着下次访问时,它将无法在缓存中找到,因此将对其进行计算,并将结果再次放入缓存中1小时。

您正在使用它来刷新缓存。

我建议您同时使用属性maxCapacity来控制缓存的大小,使其不会超出比例。

您可以执行以下操作:

val cache: Cache[Double] = LruCache(maxCapacity = 100, timeToLive = 1 hour)
def cachedOp[T](key: T): Future[Double] = cache(key) {
  getTableFromDb() // returns Future[Double]
}

希望它有所帮助。

请参阅documentation