alibaba / jetcache

JetCache is a Java cache framework.
Apache License 2.0
5.03k stars 1.05k forks source link

使用@CacheRefresh注解,cacheType为Both时,每台机器都会去更新远程redis吗,机制是啥样的呢 #819

Open zhaojinhua123 opened 11 months ago

zhaojinhua123 commented 11 months ago

还有@CacheUpdate与@CacheInvalidate注解,其他节点在收到消息后,会更新/删除远程redis缓存吗

areyouok commented 11 months ago

CacheRefresh是定期后台刷新,以免缓存过期的时候去数据库加载响应太慢。如果Cache类型是Remote或Both,有一个简单的分布式锁,只有一个机器会去执行刷新(以免给数据库造成压力)。如果是Both,其它(没抢到锁的)机器定期执行的时候会使用redis里面的数据替换本地cache的数据。这里没有通知机制。

Cache更新的时候,将其它机器的本地Cache失效,这个是2.7才支持的可选功能,只针对Both类型有效,默认没有开。打开需要设置(比如在yml中)broadcastChannel,并在Cached注解(手工构造时在QuickConfig类)上面设置syncLocal = true。