future cache vs value cache #82
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This fixes #45 by updating the
CacheMap
signature to reflect how it is really used. This also resolves #59 by introducing a new concept, theCacheStore
.The
CacheMap
stores futures/promises for results, so it can be synchronous and prevents us from queueing multipleload
calls. It isn't straightforward to adjust this to just store values, because we can't store a value in the cache until the load has completed, so we would end up issuing every load during a request instead of re-using a load.My proposed solution is to add a second layer of caching. The first layer of cache, L1, still stores the
CompletableFuture
that will eventually contain the result, so we don't issue multipleload
calls. The new layer, L2, is where theCacheStore
comes in. The general algorithm works something like this: