phuslu / lru

High performance LRU cache
MIT License
182 stars 6 forks source link

是否可以添加一个回调当kv被驱逐出缓存的时候执行。 类似 Evicted(func(key, value) #5

Closed yeqiaojun closed 5 months ago

yeqiaojun commented 5 months ago

某些场景下,需要做一个类似回调

phuslu commented 5 months ago

目前 phuslu/lru 的实现并不会主动驱逐过期项(请见readme limiation部分) 所以增加这个回调意义不大,可能还会导致误解(用户会疑惑问什么按照TTL已经过期了,驱逐回调为什么还没有触发?)

等我想到一个比较合适方式实现主动驱逐才可以,那样就可以暴露一个选项

WithEvication(true, func(K, V))
lxzan commented 5 months ago

目前 phuslu/lru 的实现并不会主动驱逐过期项(请见readme limiation部分) 所以增加这个回调意义不大,可能还会导致误解(用户会疑惑问什么按照TTL已经过期了,驱逐回调为什么还没有触发?)

等我想到一个比较合适方式实现主动驱逐才可以,那样就可以暴露一个选项

WithEvication(true, func(K, V))

需要增加堆或者时间轮, 否则做不到实时

phuslu commented 5 months ago

是的,如果要提供回调函数的化,“实时”驱逐是隐式的保证,那么随机驱逐的实现方式也会造成误解/误用

很可能我会暴露 WithEvication(true) 这种选项并且用随机驱逐方式实现,而不提供回调。

izturn commented 5 months ago

正打算提交这样一个feature request, 我刚碰到这样一个bug,

phuslu commented 5 months ago

如果需要“实时”驱逐 (比如延迟队列)功能,推荐看一下 https://github.com/lxzan/memorycache @yeqiaojun @izturn

不要实时的驱逐的话,我可能会近期实现。