PHP高并发写入数据重复问题

在注册页面上,如果出现高并发情况下,会出现重复用户名的情况,那么就导致后续登录环节出现混乱。

考虑过使用队列,但是队列有一定的时间差,按照注册流程,注册成功后会马上随机到达用户界面进行下一步操作,如果队列的话,可能到达用户界面时候,用户表注册信息还没有进来

有没有其他什么办法可以解决的呢?

阅读 5.2k
2 个回答
  • 查重时加锁
  • Redis 用一个 Hash 来存储已经被占用的用户名,然后先判断再插入数据库。

如果要防止用户名重复,那么有比较多的方式来实现。
1.从根源防重复,那么数据库表字段中“名称”加唯一索引。
2.使用redis集合
3.使用redis布隆过滤器

但是1有个问题,虽然能从根源上解决问题,但是如果数据量很大,数据库压力会很大,全部请求会转化为SQL并打到数据库,所以可以使用redis。

如果只是高并发,但是数据量不大,使用redis集合是可以解决问题的,但是如果并发时间长,预估数据量会很大,redis的内存不是那么足,那么使用redis集合可能就不那么太合适,可以使用redis的布隆过滤器进行过滤(对使用布隆过滤器的副作用需要有预估并有合适的解决方案)

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