HTTP 并发同一时间请求了两次

在APP和小程序网络请求中,都会出现同一时间并发请求两次的情况,以前没有碰到,不代表没有发生,现在在用户登陆后,添加了赠送豆子点数的逻辑,在查看记录的时候,发现了此问题。会出现同一用户在同一时间登陆两次的请求。不知道造成会同时请求两次的问题的根本原因是什么?但需要解决赠送两次的问题。

经过排查,在用户同时请求两次时,没有加锁,导致判断添加一直有效。最简单的方法是加锁。在golang中,锁是sync.Mutex。加锁会影响一点点性能。

在加锁后,此问题得到解决。代码片段:

var lock sync.Mutex
var beanMap map[string]int64

lock.Lock()
defer lock.UnLock()
val,ok:=map[openid] // 查看是否已赠送?
if ok {
    // 已赠送,可继续业务逻辑
}else{
    // 还未赠送
    // 赠送逻辑
}