美文网首页
关于多次网络请求并发导致数据库数据重复的问题

关于多次网络请求并发导致数据库数据重复的问题

作者: supory | 来源:发表于2017-01-16 14:11 被阅读1509次

背景:近日发现后台服务器有个问题,用户存在重复注册的问题,由于使用第三方账户的授权和登录,有的用户会在网络不好的情况下,多次点击登录授权,因此会造成多次访问提交。采用先向服务器发送ajax网络请求,检查是否有重复注册账户,通过返回的值判定,是登录还是注册;由于手机会因为网络或者内存的问题,导致页面卡顿、缓慢,用户多次点击发送请求,因此会发生多次创建账户的问题。

目的:1、清除数据库中重复的数据;2、采用标识符防止多次访问

补充,对于同一个账户情况下,收藏者多次收藏同一个数据问题,需要使用多个条件的分组条件

select * from `r_tab_memberfavorite` group by openid,content_id having count(*)>1;

此时,显示出来的默认是id编号较小的哪一个数据,删除的时候可以直接使用。

解决方法:

1、首先要查询出那些用户重复注册

mysql的语法两种查询方式

[1]、利用表名称先查询全部的表结果作为一个别名,然后利用原表中查询的唯一建和别名的唯一建进行匹配,返回结果,排序显示(也可以不排序),该方法相对比较慢

select * from `r_tab_member` a where ((select count(*) where openid=a.openid)>1) order by desc;

[2]、使用group by 语句+having +聚合函数对结果进行过滤得到重复的关键字的数据分组,然后查询出所有的结果

select * from `r_tab_member` where openid in (select openid from `r_tab_member` group by openid having count(openid)>1;

[3]、删除重复的数据,只保留一条

delete from `r_tab_member` where openid in (select openid from `r_tab_member` group by openid having count(openid>1)) and id not in (select min(id) from `r_tab_member` group by openid having count (openid)>1);

2、可以在客户端进行约束,也可以在服务端进行约束

客户端相对容易,只需要在用户点击授权后对该方法进行标识位的锁定,等到服务器返回结果,方法执行完毕,解锁,方能够进行二次操作。

服务端没有测试,思路:将检查重复的方法和创建用户的方法合二为一,再进行相应的数据库操作线程锁定,保证只有一个线程能成功的创建数据,其他的只能失败。

相关文章

  • 关于多次网络请求并发导致数据库数据重复的问题

    背景:近日发现后台服务器有个问题,用户存在重复注册的问题,由于使用第三方账户的授权和登录,有的用户会在网络不好的情...

  • 微信小程序防止重复点击

    简介 防止重复点击是为防止由于网络问题未响应或者客户多次点击导致数据多次请求致后台,造成后台数据出现重复处理及其他...

  • Redis雪崩、击穿、穿透

    Redis雪崩:指Redis集群出现大面积问题,或者大量key值同时过期,导致大量请求并发的请求数据库,导致数据库...

  • 秋招java后端一些公司面经分享

    oppo: 一面: java并发包,线程池相关 安全集合类 加密 网络问题:解决多次重复请求 socket编程 知...

  • iOS避免按钮重复点击

    避免按钮重复点击,如导致多次重复网络请求的问题。重点研究了ReactiveObjc方案。另外还有运行时交换系统方法...

  • 【悲观锁】和【乐观锁】来解决秒杀系统中的超卖问题

    我们知道在秒杀系统中肯定是会碰到超卖的问题的,原因就是高并发请求导致了数据库的脏读和不可重复读,进而造成了超额用户...

  • 脏读、幻读和不可重复读

    一、引言 脏读、不可重复读和幻读是数据库中由于并发访问导致的数据读取问题。当多个事务同时进行时可以通过修改数据库事...

  • axios取消重复请求

    在开发中,经常会遇到接口重复请求导致的各种问题。 对于重复的get请求,会导致页面更新多次,发生页面抖动的现象,影...

  • 脏读、幻读和不可重复读

    一、引言 脏读、不可重复读和幻读是数据库中由于 并发访问 导致的数据读取问题。当多个事务同时进行时可以通过修改数据...

  • Redis高并发下使用及注意事项

    Redis高并发下使用及注意事项 Redis 数据失效导致的雪崩 因为 缓存失效,从而导致大量请求 操作数据库:1...

网友评论

      本文标题:关于多次网络请求并发导致数据库数据重复的问题

      本文链接:https://www.haomeiwen.com/subject/gqfpbttx.html