我有 2 个接口,一个是读取表内容 一个是更新表 需求是保证数据正确,我应该如何写代码?是在应用层的接口层面 使用 java 的锁来保证这 2 个接口互斥吗? 听说串行化不推荐使用? 到底应该如何写代码?

举报· 124 次点击
登录 注册 站外分享
9 条回复  
b821025551b 小成 2024-11-4 16:43:21
这个看起来有些奇怪,不过按照你这个需求,在应用层上倒是有一些思路: 写的接口传入读的数据,写入前进行校验,如果不一致抛出信息。
coderYang 小成 2024-11-4 16:42:11
应用层的 Service 应该是要退出讨论的,你描述就是并发环境下的数据库修改。不同 db 的限制不同,例如 mysql 就是 mvcc ,不同的事务等级在遇到并发问题的处理方案不同。
coderxy 小成 2024-11-4 16:21:42
最简单的做法就是加一个分布式锁保证两个接口互斥, 但是如果你数据库有主从的话,也没办法保证拿到的一定是最新的数据。
xiaogu2014 小成 2024-11-4 16:19:59
```需求是保证数据正确``` 你设置 db isolation level 不要是 read uncommitted 就可以了。 读取和写为啥要互斥呢=。 除非是写和写之间。
chenjk 初学 2024-11-4 16:17:43
没理解,读、写接口本来就互不影响,可以详细说说 (:
nice2cu 初学 2024-11-4 16:16:58
没懂啥意思 update 的 service 方法加事务就行吧防止读未提交或出现回滚 查询不用管
csys 初学 2024-11-4 16:15:04
如果是两个接口 为啥要“保证数据正确”呢 一般只有在单个事务场景才会需要保证强一致性 这和串行不串行没啥关系,因为你没法知道调用方”读“多久,除非它主动告诉你自己”读“使用完了 如果要锁的话,锁的生命周期就是得由调用方来控制了
Plutooo 小成 2024-11-4 16:13:44
两个接口各干各的会有什么问题吗
MoYi123 小成 2024-11-4 15:53:52
一般情况下是 读取表 写个 select 更新表写个 update, 其他都不用管.
返回顶部