分布式并发情况下如何做到同步?
简单描述下场景:
比如一个用户只有一次机会申请某件事,是否申请过当然是记录在数据库的,下次再来就通过查数据库判断。单机并发的话,勉强可以通过在判断和写记录外层加同步锁解决。可是分布式并发情况如何是好?客户如果准备两台机器恰好同时访问了我两台服务器,那么他就可以申请两次了。
请问有没有好的解决办法?
[解决办法]
每一次请求的时候 向服务器请求一次当前数据库的加密的字符串 也就是唯一的 服务器根据客户端传过来的字符串作比较 2者相等 则处理
不想等 则表示多处请求 不给予处理 相当于游戏里面的防止双开策略一样
[解决办法]
这类问题一般直接依赖于数据库层面的事务来保证。
类似你这种问题,十分的比较简单,一条SQL语句搞定:
Update 申请表
Set 申请过 = 1, 申请时间 = now(), 其它需要更新的字段...
Where 用户ID = "张三" And 申请过 = 0