a) refactor caching API to store Future[V] as the cached value so that if many requests ask for the same cache key before the query returns, they will all get the same Future which will have a value once the first once completes. This future is still wrapped in a Hystrix Command to enable circuit-breaker functionaliy, b) use scala Future(s)/Duration(s) throughout