业务描述:
一般在如上表单用户填写用户名
后立即请求后端此用户名
是否存在,但是从填写用户名
到真正注册请求
是有一定时间的,如何在用户填写其他信息的时候先前填写的用户名被注册问题,解决大体思路是使用redis(redis是单线程):
- 当多个线程请求数据库检查此
用户名
是否存在 - 如果不存在,将在redis中创建此
用户名(key)
,使用setnx
(key
不存在返回1
,存在返回0
)
redis> EXISTS job # job 不存在
(integer) 0
redis> SETNX job "programmer" # job 设置成功
(integer) 1
redis> SETNX job "code-farmer" # 尝试覆盖 job ,失败
(integer) 0
redis> GET job # 没有被覆盖
"programmer"
这样实现了先检测后注册,也避免了并发下重复