-
Notifications
You must be signed in to change notification settings - Fork 39
ConcurrentLru item based time eviction policy #467
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
bitfaster
commented
Nov 12, 2023
bitfaster
commented
Nov 12, 2023
bitfaster
commented
Nov 12, 2023
bitfaster
commented
Nov 13, 2023
bitfaster
commented
Nov 13, 2023
bitfaster
commented
Nov 13, 2023
bitfaster
commented
Nov 13, 2023
bitfaster
commented
Nov 13, 2023
bitfaster
commented
Nov 13, 2023
bitfaster
commented
Nov 13, 2023
bitfaster
commented
Nov 13, 2023
bitfaster
commented
Nov 13, 2023
This was
linked to
issues
Nov 14, 2023
bitfaster
commented
Nov 14, 2023
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Implement a time-based eviction policy where the caller can specify the time to expire per item. The
IExpiryCalculatorinterface enables the caller to evaluate both the key and the value to compute aTimeSpanthat defines the time to expire:This is the same API used by Caffeine.
The new policy is exposed on
ICacheviaCachePolicyas a newOptional<IDiscreteTimePolicy>calledExpireAfter:where
IDiscreteTimePolicyis defined asLruInfodoes not know about value type, butIExpirydoes. Therefore, internally store as object and use generic get and set methods to specify the expiry. The builder methods are typed, so this is largely hidden behind the builder.IVariableTimePolicy.TryGetTimeToLive()has key type as a generic method parameter, because Policy is not generic in terms of key or value.WithExpireAfteris present only onConcurrentLruBuilderandAsyncConcurrentLruBuilderWithExpireAfteronAtomicAsyncConcurrentLruBuilder,AtomicConcurrentLruBuilder,AtomicScopedAsyncConcurrentLruBuilder,AtomicScopedConcurrentLruBuilder,ScopedAsyncConcurrentLruBuilderorScopedConcurrentLruBuilder.WithExpireAfter, then call an As method to change the builder type. The above builders all have guards in the build method to throw a runtime exception in this case.