这个怎么做? 2025-04-25 13:57 采纳率: 52.5%
浏览 5
已结题

Java使用Canal,只有debug时数据会更新

在Java使用Canal,当数据库变化时,EntryHandler的实现类去通知Caffeine和Redis更新,我的代码debug的时候就可以实时更新数据库变化,但是不debug了,实现类中写的逻辑就跟失效了一样,Caffeine和Redis都不会做出改变

@CanalTable("tb_item")
@Component
public class ItemHandler implements EntryHandler<Item> {

    @Autowired
    private RedisHandler redisHandler;
    @Autowired
    private Cache<Long, Item> itemCache;

    @Override
    public void insert(Item item) {
        //写数据到JVm进程缓存
        itemCache.put(item.getId(), item);
        //写数据到Redis
        redisHandler.saveItem(item);
        System.out.println("------------------------------------------------------------INSERT");
    }

    @Override
    public void update(Item before, Item after) {
        //写数据到JVm进程缓存
        itemCache.put(after.getId(), after);
        //写数据到Redis
        redisHandler.saveItem(after);
        System.out.println("------------------------------------------------------------UPDATE");
    }

    @Override
    public void delete(Item item) {
        //写数据到JVm进程缓存
        itemCache.invalidate(item.getId());
        //写数据到Redis
        redisHandler.deleteItem(item.getId());
        System.out.println("------------------------------------------------------------DELETE");
    }
}
  • 写回答

4条回答 默认 最新

  • 这个怎么做? 2025-04-25 16:22
    关注

    问题解决了,因为我配置了Nginx本地缓存,当Canal检测到数据发生变化时,会通知Redis和Caffeine更新数据,但不会通知Nginx,因此当浏览器发起请求时,会发现Nginx本地缓存中就有数据,就将Nginx中的数据返回了,造成了数据不一致的现象

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月3日
  • 已采纳回答 4月25日
  • 修改了问题 4月25日
  • 创建了问题 4月25日