在同一个方法里,有redis,数据库和api,如何保证方法的事务性或者最终一致性?
一个 Service 方法里有三个操作
doSomething{
数据库写操作
redis 写操作
调用某 api
}
如何实现这个方法的事务性,或者最终一致性?
如果仅有redis和数据库操作
@Transactional
doSomething{
数据库写操作
redis 写操作
}
redis抛异常导致数据库回滚实现事务性
有问题吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
跨 mysql 和 redis 实现事务方案肯定很复杂啊,推荐最终一致性方案。
最终一致性可以通过消息队列解耦来实现。基本思路:
然后启动另外的服务接收消息
需要注意的点:
这种情况可以参考TCC(Try、Confirm、Cancel)思路。
多个数据存储想要通过单个事务来控制不可能了。要手动来控制
你先定义什么是一致性。。如果那个API有巨大的副作用,比如发射核弹,成功失败都不太可能回滚了