大并发下,解决数据准确性
一条语句,就是插入时的验证条件
INSERT INTO vote_log(p_id, openid, status) select 216, '12313', 1 where (select count(*) from vote_log) <=3
在并发下,依然插入N条数据。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
mysql 自身无法达到你的需求
这条 sql 如果是做业务限制的话,改为前面加个缓存来处理这个逻辑.
如果这个 sql 不做业务限制,只是限制日志写入的话,加个队列,异步顺序处理也可以了.
看项目大小和用户量多少,如果不多的话直接使用mysql也行
1.增加一张表记录用户投票数记录,用户 | 投票数 | 时间;
2.查询当前用户投票数是否大于3大于直接返回;
3.每次操作业务更新投票数,update table set 投票数 = 投票数+1 where 用户 + 投票数 <3。只有修改成功的可以下一步业务操作,否则返回。这里主要用到mysql更新同一行时会锁行,同时修改事当前读,获取到的投票数是最新值