请教一个 Springboot @Cacheable 相关的问题,求大佬解答。

2020-03-05 14:46:23 +08:00
 LMuyi

@Cacheable(condition = "#click > 50")

public Topic selectById(Integer id) {
    Topic topic = topicDao.selectById(id);
    int click = topic.getClick();
    return topic;
}

是这样的,我想达成的目的是,当点击数>50 时进行缓存,但是无论如何这个 click 值取不到 condition 的判断里,查了挺久,但是说的都是从方法的参数取值。 或者说,这个 conditon 中的变量只能是方法参数,不能是方法里的变量? 还是说这种需要按条件进行的缓存,不应该用这种方式,求 v2 大佬指点一下。🙏

1441 次点击
所在节点    问与答
8 条回复
zoran
2020-03-05 17:55:08 +08:00
@Cacheable 注解不适合也不能进行你这种复杂的条件缓存,你这种情况可以通过接口计数器配合 reids 接口 api 进行缓存
zhady009
2020-03-05 18:21:26 +08:00
#result 可以获取返回结果你可以试试
lxk11153
2020-03-05 18:23:59 +08:00
是的,conditon 中的变量只能是方法参数,不能是方法里的变量
LuckyLight
2020-03-05 18:40:53 +08:00
@ Cacheable(unless = "result.click <= 50")
LuckyLight
2020-03-05 18:41:37 +08:00
@LuckyLight 少了个 #
LMuyi
2020-03-06 13:59:14 +08:00
@zhady009
@LuckyLight
谢谢谢谢,尝试了一下,但还是取不到。
LMuyi
2020-03-06 13:59:54 +08:00
@zoran 谢谢提供思路!🙏
zhady009
2020-03-06 14:10:50 +08:00
@LMuyi 4 楼那个是对的就是符合你的这个需求 unless 里的表达式为 true 不缓存结果

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/650086

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX