alibaba / jetcache

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

jetcache是否支持no cache的配置? #23

Closed rchlz closed 6 years ago

rchlz commented 6 years ago

某些条件下,可能没有redis或tair,那是否支持不开启二级缓存?或者有时为了测试方便连一级缓存也不开启?

areyouok commented 6 years ago

没有redis和tair的话,其实remote这个部分也可以配置一个linkedhashmap cache的,然后你不用它就好了,那个“remote”只是个名字,其实那个位置也可以放本地缓存实现。

你说的全局开关现在还没有,下个版本考虑加上。

rchlz commented 6 years ago

是的,全局开关有必要。那也加个local和remote加个开关?配置两个linkedhashmap cache会不会多占内存

areyouok commented 6 years ago

空map不会占地方的。

areyouok commented 6 years ago

另外其实jetcache有针对单个cache进行开关的能力,如果每个Cached注解都指定一个属性,也能实现总开关的功能,不过稍微复杂点,文档里面没写。

rchlz commented 6 years ago

最好是在配置里,总开关或者remote/local级别开关。 修改注解去控制开关确实复杂了,感觉必要性不大呢?

areyouok commented 6 years ago

Cached上面有condition和unless两个属性,可以写表达式。比如:

@Cached(condition = "mvel{bean('configBean').enableUseCache && bean('configBean').enableCache}")

这configBean就是spring context里面的一个bean。enableUseCache是这个缓存的开关,enableCache是总开关。当然其实你可以把总开关的逻辑写到isEnableUseCache()方法的实现里面去,这样mvel表达式就会比较简单。

当初做这个不是为了实现总开关,而是为了实现每个缓存实例都有开关,甚至可以在线上直接开启或关闭,而不需要发布(搭配JMX直接修改configBean的属性)。配合缓存统计和其它监控数据,来对缓存的效果进行精确的观察和调整。

这稍微有些复杂,而且条件表达式的处理有些微妙,所以文档里面就没提。

areyouok commented 6 years ago

总开关的问题,我之前考虑过,最后还是放弃了,Cache接口上有一些tryLock之类的方法,如果Cache整体disable掉就会出问题的。如果想要关闭方法缓存,Spring Boot环境下只要去掉@EnableMethodCache注解就可以。

所以这个问题我关闭了。

rchlz commented 6 years ago

理解,既然springboot有这个注解可以作为开关,那实际上也满足需求了啊