expiringmap icon indicating copy to clipboard operation
expiringmap copied to clipboard

What about a ExpirationPolicy.ONLY_IF_ACCESSED?

Open mishaxz opened this issue 7 years ago • 5 comments

  1. entry expires only if it has been accessed
  2. this could be useful especially in conjunciton with .maxSize to expire entries only a set time after they have been accessed but maxSize prevents the map from growing out of control
  3. in some unpredictable situations (like waiting for responses across the network), this could be useful when you need to keep some data in a map until you receive a confirmation request. Then you don't need it for much longer afterwards because your code is not depending upon external slowdown factors

mishaxz avatar Apr 22 '17 02:04 mishaxz

How would this be different than ExpirationPolicy.ACCESSED?

jhalterman avatar Apr 22 '17 03:04 jhalterman

I was under the impression that ACCESSED will expire entries even if they are never accessed?

mishaxz avatar Apr 22 '17 03:04 mishaxz

That's right - so how would ONLY_IF_ACCESSED work - start the timer for an entry after it's accessed for the first time, and reset after each subsequent access?

jhalterman avatar Apr 22 '17 03:04 jhalterman

nah, I was just thinking leave it in the map.. and if it is never accessed, it never expires. However, to prevent it from growing out of control the user could set maxSize to have it expire entries that way (just in case)

however, probably a good idea to throw an exception if maxSize is not set to be very safe )

ok maybe this feature is a "would be nice" thing that could cause problems...

mishaxz avatar Apr 22 '17 04:04 mishaxz

This would indeed be useful, with such a policy there would be no need for any timers/threads. The expiration time would only be checked when the entry is accessed to check if it should be returned or not. It would decrease the overhead and complexity of the ExpiringMap while still being useful when the map size growing too big is not a concern.

Nohus avatar Nov 04 '17 23:11 Nohus