开发者社区 问答 正文

spring boot jpa 查询缓存问题? 400 报错

spring boot jpa 查询缓存问题? 400 报错

jpa 在一次请求过程中,查询一个对象数据出来后,做其他业务处理(这个业务逻辑需要几秒钟),这个时间可能别人修改了数据库内容(我不知道情况下)

然后我重新查询一次数据(这个时候jpa并没有查询数据库,而是使用了缓存数据,)

怎么解决这个问题,保证我在一次请求中,查询数据库都是新的数据,而不是缓存的?

 

 

 

展开
收起
爱吃鱼的程序员 2020-05-30 21:56:46 854 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    修改数据的同时也要清除缓存啊,查询数据先从缓存中查询,查询不出来进入数据库查询并写入缓存,建议看下spring cache,缓存一键式注解(类似于事务管理),同时可以和redis无缝衔接(默认ehcache)。######回复 @wad12302 : 要不然,你就要用EntityManager强制从数据库读取最新的,但是这又很无奈了。如果你一直都要求读取DB最新的数据,而你此时本地又做了修改。那你要怎么办?还不如直接把需求说出来。######并不是我修改的数据库, 我的意思是,在一次请求中,多次查询数据库,后面的查询都用了一级缓存的数据,######修改的方法上加evict,清除缓存啊######

    第一,确保所有的数据操作都是通过JPA而不是别的。只有保证了这个,才能确保缓存。

    第二,使用锁机制。@version从Hibernate时代就可以用来确保数据的安全。

    第三,修改业务流程。确保不会出现经常交互处理同一个数据的情况。实际上现实业务中,很少有多人同时处理一条记录的情况,绝大多数都可以通过各种方法绕过去。

    ######

    如果有这种情况的需求,可以使用 

    entityManager.clear();
    2020-05-30 21:56:47
    赞同 展开评论