前端请求php写入数据的接口太频繁,导致mysql中出现大量重复数据,如何处理
认证高级PHP讲师
七目鱼
前端限制 -- 过滤频繁的请求,如按钮变灰,或者控制一个标志变量来判断是否执行ajax请求 。。这个只是体验,并不能真的限制~~关键是后端限制比如: select for update
整个请求的过程都可以做放置重复提交的验证。
在前端控制,比如按钮置灰等
在后端业务逻辑中,通过查询,判断该内容是否已经提交过(通过缓存来记录之类的)
在数据库层通过唯一键的方式来限制重复提交的记录。对于重复提交的内容自动被过滤。
在高并发的情况下,其实还要考虑下db 是不是能够扛得住并发,所以增加队列的限制,使得并发在进入db 的时候是一个串行的操作,当然这个还得看时机情况了。
MYSQL 的话用事务处理吧。。。
楼上回答的,有没有看问题啊。这种情况基本上只能靠前端做限制,或者API规定同一个唯一标识的请求频率。
需要说明什么数据重复了,重复了有什么影响?业务逻辑上要做避免重复的检查吗?先把业务逻辑定义清楚,才能有针对性的出解决方案。
前端先过滤掉重复刷新的。然后服务端再去过滤。
在表单里生成一个唯一的标识,提交的时候判断这个标识的内容有没有提交过了。
一般来说都是前端限制下,比如button按钮在后端响应结束之前置灰;一般需求这样做就足够了
七目鱼
前端限制 -- 过滤频繁的请求,如按钮变灰,或者控制一个标志变量来判断是否执行ajax请求 。。这个只是体验,并不能真的限制~~
关键是后端限制
比如: select for update
整个请求的过程都可以做放置重复提交的验证。
在前端控制,比如按钮置灰等
在后端业务逻辑中,通过查询,判断该内容是否已经提交过(通过缓存来记录之类的)
在数据库层通过唯一键的方式来限制重复提交的记录。对于重复提交的内容自动被过滤。
在高并发的情况下,其实还要考虑下db 是不是能够扛得住并发,所以增加队列的限制,使得并发在进入db 的时候是一个串行的操作,当然这个还得看时机情况了。
MYSQL 的话用事务处理吧。。。
楼上回答的,有没有看问题啊。这种情况基本上只能靠前端做限制,或者API规定同一个唯一标识的请求频率。
需要说明什么数据重复了,重复了有什么影响?业务逻辑上要做避免重复的检查吗?先把业务逻辑定义清楚,才能有针对性的出解决方案。
前端先过滤掉重复刷新的。然后服务端再去过滤。
在表单里生成一个唯一的标识,提交的时候判断这个标识的内容有没有提交过了。