最近在开发任务服务,其中有一个任务上报模块。其业务逻辑如下: 1.上报子任务详情,更新数据库 2.根据子任务状态同步总任务状态,实时更新任务进度。 最简单的实现方式就是UpdateSubTask,UpdateTask。 显然,这种方式并发情况下会有问题。 优化一 1.对子任务id进行分布锁,这里记得上锁时要添加超时时间,不然死锁就完犊子了。 func (impl *RedisCache) Lock(ctx context.Context, key string, expiration time.Duration) error { ok, err := impl.r.SetNX(impl.getKey(key), 1, expiration).Result() if err != nil { return err } if !ok { return errors.New("redis lock: already locked") } return nil } func (impl *RedisCache) Unlock(ctx context.Context, key string) e.... 任务服务的一次优化 优化