大并发下,解决数据准确性

一条语句,就是插入时的验证条件
INSERT INTO vote_log(p_id, openid, status) select 216, '12313', 1 where (select count(*) from vote_log) <=3

在并发下,依然插入N条数据。

阅读 2.7k
2 个回答

mysql 自身无法达到你的需求

这条 sql 如果是做业务限制的话,改为前面加个缓存来处理这个逻辑.

如果这个 sql 不做业务限制,只是限制日志写入的话,加个队列,异步顺序处理也可以了.

看项目大小和用户量多少,如果不多的话直接使用mysql也行
1.增加一张表记录用户投票数记录,用户 | 投票数 | 时间;
2.查询当前用户投票数是否大于3大于直接返回;
3.每次操作业务更新投票数,update table set 投票数 = 投票数+1 where 用户 + 投票数 <3。只有修改成功的可以下一步业务操作,否则返回。这里主要用到mysql更新同一行时会锁行,同时修改事当前读,获取到的投票数是最新值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题