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

发布于 2022-09-12 04:38:24 字数 157 浏览 19 评论 0

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

千仐 2022-09-19 04:38:24

mysql 自身无法达到你的需求

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

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

爱你是孤单的心事 2022-09-19 04:38:24

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文