fix(cache): evict least recently used entries in MemoryCacheStore - #5869
Merged
mcollina merged 1 commit intoSep 24, 2026
Merged
Conversation
Member
Author
Since nodejs#5737, overflowing maxSize or maxCount evicted ceil(n/2) entries from every key. With one entry per key, the common case, that wiped the whole cache, including the entry just written. Evict least recently used entries store-wide until the store is at half of its limits, as documented, keeping the entry just written unless it alone exceeds a limit. Writes and get() hits mark a key as recently used. Also replace an expired entry on rewrite instead of adding a duplicate that is never evicted until the store overflows. Signed-off-by: James M Snell <jasnell@gmail.com>
jasnell
force-pushed
the
jasnell/fixup-memory-cache-store-eviction
branch
from
September 23, 2026 04:47
b65c898 to
c04f4f1
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #5869 +/- ##
=======================================
Coverage 93.85% 93.85%
=======================================
Files 110 110
Lines 39879 39914 +35
=======================================
+ Hits 37428 37463 +35
Misses 2451 2451 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
metcoder95
approved these changes
Sep 24, 2026
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
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.
This relates to...
Cache
Rationale
Since #5737, overflowing maxSize or maxCount evicted ceil(n/2) entries from every key. With one entry per key, the common case, that wiped the whole cache, including the entry just written.
Found while performing an audit of the current implementation.
Changes
Evict least recently used entries store-wide until the store is at half of its limits, as documented, keeping the entry just written unless it alone exceeds a limit. Writes and get() hits mark a key as recently used.
Also replace an expired entry on rewrite instead of adding a duplicate that is never evicted until the store overflows.
Features
N/A
Bug Fixes
N/A
Breaking Changes and Deprecations
N/A
Status