V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LMuyi
V2EX  ›  问与答

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

  •  
  •   LMuyi · 2020-03-05 14:46:23 +08:00 · 1485 次点击
    这是一个创建于 1760 天前的主题,其中的信息可能已经有所发展或是发生改变。

    @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 大佬指点一下。🙏

    第 1 条附言  ·  2020-03-06 14:03:14 +08:00
    我看有人收藏,所以先给出目前我的解决办法。
    因为注解这种办法无法实现我的功能。
    所以改而用 redisTemplate 来按条件存取值,以实现缓存功能。
    实现代码部分其实就是 opsForValue()以及简单的判断就不贴出来了。
    谢谢各位🙏
    8 条回复    2020-03-06 14:10:50 +08:00
    zoran
        1
    zoran  
       2020-03-05 17:55:08 +08:00
    @Cacheable 注解不适合也不能进行你这种复杂的条件缓存,你这种情况可以通过接口计数器配合 reids 接口 api 进行缓存
    zhady009
        2
    zhady009  
       2020-03-05 18:21:26 +08:00
    #result 可以获取返回结果你可以试试
    lxk11153
        3
    lxk11153  
       2020-03-05 18:23:59 +08:00
    是的,conditon 中的变量只能是方法参数,不能是方法里的变量
    LuckyLight
        4
    LuckyLight  
       2020-03-05 18:40:53 +08:00 via Android
    @ Cacheable(unless = "result.click <= 50")
    LuckyLight
        5
    LuckyLight  
       2020-03-05 18:41:37 +08:00 via Android
    @LuckyLight 少了个 #
    LMuyi
        6
    LMuyi  
    OP
       2020-03-06 13:59:14 +08:00
    @zhady009
    @LuckyLight
    谢谢谢谢,尝试了一下,但还是取不到。
    LMuyi
        7
    LMuyi  
    OP
       2020-03-06 13:59:54 +08:00
    @zoran 谢谢提供思路!🙏
    zhady009
        8
    zhady009  
       2020-03-06 14:10:50 +08:00
    @LMuyi 4 楼那个是对的就是符合你的这个需求 unless 里的表达式为 true 不缓存结果
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2855 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 14:02 · PVG 22:02 · LAX 06:02 · JFK 09:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.