开发者社区 > 云原生 > 中间件 > 正文

Seata中tcc模式下想利用cancel回滚redis这块是不是有问题呀?

已解决

Seata中tcc模式下 try包含数据库+redis+一些逻辑处理返回,假设逻辑处理出现了问题,我想利用cancel回滚redis 但是因为开启了useTCCFence 导致回滚不会执行cancel回滚redis 这块是不是有问题呀?异常了也算执行了prepare只是部分失败了,应该插入tcc_fence_log记录,回滚的时候应该允许回滚,tcc的useTCCFence也是依赖事务的 那我使用非事务型数据库是不是不行呀?

展开
收起
fuxixi 2022-12-26 10:35:45 523 0
1 条回答
写回答
取消 提交回答
  • 推荐回答

    在 Seata 中,TCC 模式下的 try 阶段通常包含了多个操作,比如数据库操作、缓存操作、逻辑处理等。如果在 try 阶段中的某个操作发生了异常,Seata 会自动触发 cancel 阶段的回滚操作。

    但是,如果你在 Seata 中开启了 useTCCFence 参数,那么 Seata 就会启用 TCC 的围栏机制。在这种情况下,如果 try 阶段中的某个操作发生了异常,Seata 会记录下这个异常,并记录到 TCC_FENCE_LOG 表中。此时,Seata 会忽略这个异常,并继续执行 try 阶段中的其他操作。

    在 TCC 模式下,使用非事务型数据库是可以的,但是你需要注意,在 TCC 模式下,Seata 会依赖事务来协调分布式事务的执行。所以,如果你使用的是非事务型数据库,那么 Seata 就无法保证事务的原子性。因此,建议在 TCC 模式下使用事务型数据库。

    希望这能帮到你!

    2022-12-31 08:03:14
    赞同 展开评论 打赏

为企业提供高效、稳定、易扩展的中间件产品。

相关电子书

更多
Redis在唯品会的应用实践——架构演进与功能定制 立即下载
微博的Redis定制之路 立即下载
《Seata 1.3 新特性以及如何参与社区》 立即下载