一个内容域基于成员id跨域操作的redis分布式锁

一个内容域基于成员id跨域操作的redis分布式锁_第1张图片
// 根据成员信息自动创建个人栏目
func (s *CmsColumnService) SaveCmsColumnMember(userId *connectionProto.UserID) *cmsbasedto.JsonResult {
    var memberEs = refesentity.FindBeanContactShopMemberEs()
    memberEs.Id = gconv.String(userId.ShopMemberId)
    var lock, lockFlag = memberEs.GetLock()
    if !lockFlag {
       return cmsbasedto.ResultOk()
    }
    defer lock.Unlock()
    var colRet = apidaodb.FindBeanCmsDao().QueryMemberColumn(userId.ShopMemberId)
    if colRet.ExistRecord() {
       golog.Info("QueryMemberColumn already exists!")
       return cmsbasedto.ResultOk()
    }
    var fromUser = param.NewColumnSaveParam().FromUser(userId)
    var ret = s.SaveCmsColumn(context.TODO(), fromUser)
    if ret.IsFailed() {
       golog.Error("CmsColumnChild ret:", ret)
    }
    if fileutils.IfWindows() {
       golog.Info("ColumnMemberOnly!userId:", userId, fromUser)
    }
    if ichubconfig.IfNotMaster() {
       golog.Info("CmsColumnService SaveCmsColumnMember ret:", ret)
    }
    return ret
}
func (self *ContactShopMemberEs) ObjectKey() string {
    return "es:" + ichubconfig.FindEnv() + ":" + self.TableName() + ":" + gconv.String(self.PkeyValue())
}
func (self *ContactShopMemberEs) ObjectKeyRef() string {
    return "cms:ref:" + self.ObjectKey()
}

func (self *ContactShopMemberEs) GetLock() (*redislock.RedisLocker, bool) {
    var lock = redislock.NewRedisLocker(self.ObjectKeyRef(), self.Id, 5*time.Second)
    var lockFlag, err = lock.Lock()
    if err != nil {
       golog.Warn(err)
       return lock, false
    }

    return lock, lockFlag

}

你可能感兴趣的:(c#,开发语言)