wsw
V2EX  ›  问与答

spring cache 能缓存指定的值吗?好像不行,那这种情况大家是怎么解决的?

  •  1
     
  •   wsw · Feb 2, 2021 · 1891 views
    This topic created in 1961 days ago, the information mentioned may be changed or developed.

    一个查询操作,缓存的是查出的实体类: https://ww1.sinaimg.cn/large/006vQwEGgy1gn97871sdsj30de020t8q.jpg 更新操作,缓存的却是更新后的结果: int https://ww1.sinaimg.cn/large/006vQwEGgy1gn94vg7wnwj30co01xq2z.jpg 这样的话,更新数据库之后,更新缓存,再次查询,查出的却是: int 现在的解决方法就是将更新操作返回 int 改为返回实体类,这样更新的时候更新的就是实体类,而不是用返回值 int 去覆盖;我在想,能不能指定缓存的内容,让 cacheput 更新的时候更新的是实体类?

    9 replies    2021-02-02 17:47:02 +08:00
    wsw
        1
    wsw  
    OP
       Feb 2, 2021
    wsw
        2
    wsw  
    OP
       Feb 2, 2021
    AlkTTT
        3
    AlkTTT  
       Feb 2, 2021
    api 应该没这么“智能”吧?
    可以试试重写这个注解的逻辑,aop 拦截执行前的 bean
    或者更新操作以后,再执行一次查询操作?
    wsw
        4
    wsw  
    OP
       Feb 2, 2021
    @AlkTTT #3 对 我感觉唯一的办法就是自己重写
    anonydmer
        5
    anonydmer  
       Feb 2, 2021
    感觉你想多了,更新时候常规操作不是清除缓存么?
    canbingzt
        6
    canbingzt  
       Feb 2, 2021
    update 方法 return task 就行
    canbingzt
        7
    canbingzt  
       Feb 2, 2021
    还有个问题,缓存的内容不能是 null,可能还需要在注解中加入, unless="#result == null"
    wsw
        8
    wsw  
    OP
       Feb 2, 2021
    @anonydmer #5 清缓存 然后会更新缓存
    wsw
        9
    wsw  
    OP
       Feb 2, 2021
    @canbingzt #6 对 现在就是这么解决的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5502 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 89ms · UTC 01:45 · PVG 09:45 · LAX 18:45 · JFK 21:45
    ♥ Do have faith in what you're doing.