首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > 高性能WEB开发 >

分布式并发情况下怎么做到同步

2014-03-19 
分布式并发情况下如何做到同步?简单描述下场景:比如一个用户只有一次机会申请某件事,是否申请过当然是记录

分布式并发情况下如何做到同步?
简单描述下场景:
  比如一个用户只有一次机会申请某件事,是否申请过当然是记录在数据库的,下次再来就通过查数据库判断。单机并发的话,勉强可以通过在判断和写记录外层加同步锁解决。可是分布式并发情况如何是好?客户如果准备两台机器恰好同时访问了我两台服务器,那么他就可以申请两次了。

请问有没有好的解决办法?
[解决办法]
每一次请求的时候  向服务器请求一次当前数据库的加密的字符串  也就是唯一的  服务器根据客户端传过来的字符串作比较  2者相等 则处理

不想等 则表示多处请求 不给予处理  相当于游戏里面的防止双开策略一样
[解决办法]
这类问题一般直接依赖于数据库层面的事务来保证。

类似你这种问题,十分的比较简单,一条SQL语句搞定:

Update 申请表 
Set 申请过 = 1, 申请时间 = now(), 其它需要更新的字段... 
Where 用户ID = "张三" And 申请过 = 0


在Java代码中,只需要检查该Update语句执行返回结果(JDBC中即被更新记录行数):如果是0,说明更新失败,也就是此用户已经申请过了;如果是1,说明更新成功,那么这次申请有效了。
[解决办法]
看看sso,单点登录,一般来说,是通过内存或数据库做一个登录或申请的同步机制
[解决办法]
1,如果申请账号同一时间可以被多个用户使用,那你可以通过给表加主键或者唯一键的方式防止并发添加,通过捕捉insert错误来提示用户已经申请,或者用缓存的add操作来控制并发
2,如果申请账号同一时间只能被一个用户使用,那就控制用户的登录,再用1楼的方式防止二次提交

热点排行