спрей-кэш: кешировать, только если не None

У меня есть доступ к базе данных, который я хотел бы кэшировать в своем приложении akka/spray. БД возвращает Future[Option[X]].

Я установил lruCache и обернул его вокруг моего доступа к базе данных.

Чего я хотел бы добиться, так это кэшировать только вариант, если он Some (X), а не, если он None. В последнем случае данные должны быть снова получены из БД.

В качестве альтернативы я мог бы провалить будущее, если бы это помогло...

Пока я снова удаляю Option из кеша через карту и восстанавливаю, если это None или будущее не удалось:

cache(key) {
      server.one[X](...)
}.map {
   case Some(x) => Some(x)
   case None => {
     cache.remove(key)
     None
  }
}.recover {
  case x => userCache.remove(key)
}

Но это очень некрасиво, не говоря уже о побочных эффектах в карте и т.д...

Заранее спасибо,

Йенс


person jens    schedule 28.01.2014    source источник


Ответы (1)