需求是用户当天只能签到一次,我是这样设计的,每次签到的时候,先去数据库中签到记录表中查询当天是否已经有签到的记录,有则提示已经签到,没有则进行签到.
问题是:如何避免当并发大或者系统慢的时候用户多次签到的问题? 应该怎么设计才能避免同类的问题出现?
用户表加一个状态,
放在一个事务中,
update 用户 set 状态=签到中 where 用户id=id and 状态=正常
签到逻辑....
用户状态修改回去,提交事务
或者用merge into 语句,具体做法百度去
@吴瑞祥: 可以不可以把验证签到和签到的逻辑都放到一个静态方法中,然后加锁?
@wulawulaho: 别这么业余.....
update table where r1 != r1
没看明白...
开放式并发控制字段
没有明确的峰值?锁的级别应该是row,程序中无需锁2楼的SQL就很好。