alibaba / jetcache

JetCache is a Java cache framework.
Apache License 2.0
5.15k stars 1.06k forks source link

关于RefreshPolicy底层工作原理 #935

Open xunyao4dev opened 1 month ago

xunyao4dev commented 1 month ago

我看到RefreshPolicy的实现其实是把每个key包装成一个Task,然后丢给 JetCacheExecutor.heavyIOExecutor() 来定时执行,但是heavyIOExecutor其实是一个coreSize=10的无界队列的线程池,max = Integer.MAX_VALUE,如果缓存的key非常多,那是不是就会导致oom?另外想问一下

heavyIOExecutor = new ScheduledThreadPoolExecutor(
                        10, tf, new ThreadPoolExecutor.DiscardPolicy());

这里的DiscardPolicy应该是无意义的吧,因为无界队列只会oom,而不会出发DiscardPolicy

xunyao4dev commented 1 month ago

@areyouok 大佬,帮忙回答下这个问题,基于上述问题,我觉得每个key加一个随机时间来做缓存雪崩其实是有意义的,否则对系统的负担压力会比较大,设置随机时间后万事OK了吧

areyouok commented 1 month ago

有停止刷新的策略

xunyao4dev commented 1 month ago

假如很长时间才停止刷新可能就会oom吧

---- 回复的原邮件 ---- | 发件人 | @.> | | 发送日期 | 2024年10月19日 07:48 | | 收件人 | alibaba/jetcache @.> | | 抄送人 | xunyao4dev @.>, Author @.> | | 主题 | Re: [alibaba/jetcache] 关于RefreshPolicy底层工作原理 (Issue #935) |

有停止刷新的策略

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

areyouok commented 1 month ago

停止刷新,这个任务就没有了,为什么会oom

xunyao4dev commented 1 month ago

比如我的缓存刷新时间很短,缓存时间很长,缓存停止刷新时间=缓存时间

---- 回复的原邮件 ---- | 发件人 | @.> | | 发送日期 | 2024年10月20日 12:58 | | 收件人 | alibaba/jetcache @.> | | 抄送人 | xunyao4dev @.>, Author @.> | | 主题 | Re: [alibaba/jetcache] 关于RefreshPolicy底层工作原理 (Issue #935) |

停止刷新,这个任务就没有了,为什么会oom

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

areyouok commented 1 month ago

在错误的使用方式下,会有无数种路径造成oom。

如果cache命中次数远远小于刷新的次数,那设置刷新干什么呢?徒增数据库的压力。

如果cache访问次数很多,为什么不把stopRefreshAfterLastAccessMillis这个值设置小一点呢?