当前使用版本(必填,否则不予处理)
version:Latest Version
该问题是如何引起的?(确定最新版也有问题再提!!!)
com.baomidou.mybatisplus.core.toolkit.LambdaUtils类中FUNC_CACHE没有实际作用,缓存根本不会被命中。
重现步骤(如果有就写完整)
com.baomidou.mybatisplus.core.toolkit.LambdaUtils类有个方法如下:
public static <T> SerializedLambda resolve(SFunction<T, ?> func) {
Class clazz = func.getClass();
return Optional.ofNullable(FUNC_CACHE.get(clazz))
.map(WeakReference::get)
.orElseGet(() -> {
SerializedLambda lambda = SerializedLambda.resolve(func);
FUNC_CACHE.put(clazz, new WeakReference<>(lambda));
return lambda;
});
}
尝试使用debug在 Class clazz = func.getClass();打印断点,同一个类属性第一次输出信息为:
cn.ruleengine.web.service.generalrule.impl.GeneralRulePublishServiceImpl$$Lambda$662/375019897
第二次为:
cn.ruleengine.web.service.generalrule.impl.GeneralRulePublishServiceImpl$$Lambda$679/1591387506
经多很多次测试,发现并不能命中FUNC_CACHE中的缓存数据,则FUNC_CACHE无作用,还有可能拖慢性能,还望相关负责人检查。
报错信息
不会报错,不影响使用。
Comment From: miemieYaho
你写个for循环就知道了
Comment From: dingqianwen
你写个for循环就知道了
你好,这个我在提出这个问题之前就测试过了,经多很多方面测试目前缓存毫无作用。
举个例子,连续执行以下方法,都不会命中缓存的。
List<RuleEngineGeneralRulePublish> rulePublishList = this.ruleEngineGeneralRulePublishManager.lambdaQuery()
.eq(RuleEngineGeneralRulePublish::getStatus, DataStatus.PUBLISHED.getStatus())
.list();
List<RuleEngineGeneralRulePublish> rulePublishList1 = this.ruleEngineGeneralRulePublishManager.lambdaQuery()
.eq(RuleEngineGeneralRulePublish::getStatus, DataStatus.PUBLISHED.getStatus())
.list();
List<RuleEngineGeneralRulePublish> rulePublishList2 = this.ruleEngineGeneralRulePublishManager.lambdaQuery()
.eq(RuleEngineGeneralRulePublish::getStatus, DataStatus.PUBLISHED.getStatus())
.list();
Comment From: dingqianwen
你写个for循环就知道了
连续执行三次后 FUNC_CACHE debug 结果为:
{Class@9671} "class cn.ruleengine.web.service.generalrule.impl.GeneralRulePublishServiceImpl$$Lambda$662/479708091" -> {WeakReference@12101}
{Class@9821} "class cn.ruleengine.web.service.generalrule.impl.GeneralRulePublishServiceImpl$$Lambda$679/1972846458" -> {WeakReference@12102}
{Class@9839} "class cn.ruleengine.web.service.generalrule.impl.GeneralRulePublishServiceImpl$$Lambda$680/88345146" -> {WeakReference@12103}
Comment From: miemieYaho
让你写for循环