Closed nikola-maric closed 3 years ago
You might wanna consider switching to this as this repo hasn't been maintained for a while. https://github.com/tycooon/memery
@github0013 yeah, I guess you are right, thanks for pointing to memery gem, it has exactly what I need 💯
Hi, I was wondering if you think this library would benefit from time-based cache invalidation mechanism expressed in seconds, something in lines of
Basically, if
expire_after
key is found inmethod_names
(as part of last Hash argument), there would be another variable to do a bookkeeping for, last time certain method was called (possibly with some arguments) and it's cache was skipped. When skipped, that time would be bumped to newTime.now
value. That check be performed when resolvingskip_cache
variable, so that iflast_access_time + expire_after <= Time.now
skip_cache should be resolved to true, at least from that angle.I could create PR + tests for that if you think its worthwhile, but preliminary benchmark results do show as much as 25-35% performance degradation (kinda expected, as there are some additional time-based checks). Maybe splitting implementation in
memoize
+timed_memoize
/expirable_memoize
could solve this and at least constrain performance degradation to methods memoized with this new approach (old methods would remain as-is).I know this would increase code surface size or decrease perf (maybe there is a way to mitigate both 🤔 ), hence the question 😄