Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
449 views
in Technique[技术] by (71.8m points)

mysql 先查询条件再insert,如何保证其原子性

一个投票项目
判断当前用户当天投票数不超过3票,满足条件,则往日志表插入一条记录。

当并发大的情况下,往往不能保证数据准确的不超过3票。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

select + insert 这两个操作的原子性,最常用的就是使用锁
1.直接使用mysql的锁,开启事务,select 的时候加排他锁,select ... for update,查到后再insert,commit之后排他锁释放
2.使用redis分布式锁,setnx获取锁,然后再进行查询和insert操作,完成后del锁


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...