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

2021 年 2 月 2 日
 wsw

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

1726 次点击
所在节点    问与答
9 条回复
wsw
2021 年 2 月 2 日
wsw
2021 年 2 月 2 日
AlkTTT
2021 年 2 月 2 日
api 应该没这么“智能”吧?
可以试试重写这个注解的逻辑,aop 拦截执行前的 bean
或者更新操作以后,再执行一次查询操作?
wsw
2021 年 2 月 2 日
@AlkTTT #3 对 我感觉唯一的办法就是自己重写
anonydmer
2021 年 2 月 2 日
感觉你想多了,更新时候常规操作不是清除缓存么?
canbingzt
2021 年 2 月 2 日
update 方法 return task 就行
canbingzt
2021 年 2 月 2 日
还有个问题,缓存的内容不能是 null,可能还需要在注解中加入, unless="#result == null"
wsw
2021 年 2 月 2 日
@anonydmer #5 清缓存 然后会更新缓存
wsw
2021 年 2 月 2 日
@canbingzt #6 对 现在就是这么解决的

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

https://study.congcong.us/t/750615

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

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

© 2021 V2EX