Golang 开发:将 AuthCode 值写入 Redis 缓存
该函数是将 AuthCode 值写入 Redis 缓存中,函数参数包括上下文、AuthCode 字符串、AuthCode 信息结构体指针、nx 字符串。其中,AuthCode 信息结构体包含过期时间等信息,函数首先根据过期时间计算出缓存过期时间 ex,并将结构体指针序列化为 json 格式的字符串。然后,函数通过 redis 代理客户端将数据写入 Redis 缓存中。如果 nx 参数为 'NX',表示只有在缓存中不存在该键值时才写入,否则直接写入。函数返回写入结果,如果写入失败,会返回错误信息。
// setAuthCodeValue AuthCode值写入redis
func setAuthCodeValue(ctx context.Context, authCode string, value *authCodeInfo, nx string) error {
ex := int64(1) // 默认立即过期
if time.Now().Unix() < value.ExpireTimeStamp {
ex = value.ExpireTimeStamp - time.Now().Unix() // 延用过期时间
}
jb, err := json.Marshal(value)
if err != nil {
log.ErrorContextf(ctx, 'json.Marshal err %+v', err)
return err
}
// 将auth_code信息写入redis
redisKey := getAuthCodeKey(authCode)
redisProxy := redis.NewClientProxy('cloud_pay.defend_retry')
if nx == 'NX' {
reply, redisErr := redis.String(redisProxy.Do(ctx, 'SET', redisKey, string(jb), 'EX', ex, 'NX'))
if reply != 'OK' || redisErr != nil {
stat.IncrCounter(ctx, 'redis.setAuthCodeValue.err', 1)
log.ErrorContextf(ctx, 'SetPayAuthCodeToRedisErr,key:%+v,reply:%+v,err:%+v', redisKey, reply, redisErr)
return errors.New('redis set fail')
}
log.InfoContextf(ctx, 'SetPayAuthCodeToRedis,key:%+v,reply:%+v', redisKey, reply)
} else {
reply, redisErr := redisProxy.Do(ctx, 'SET', redisKey, string(jb), 'EX', ex)
if redisErr != nil {
stat.IncrCounter(ctx, 'redis.setAuthCodeValue.err', 1)
log.ErrorContextf(ctx, 'SetPayAuthCodeToRedisErr,key:%+v,reply:%+v,err:%+v', redisKey, reply, redisErr)
return redisErr
}
log.InfoContextf(ctx, 'SetPayAuthCodeToRedis,key:%+v,reply:%+v', redisKey, reply)
}
return nil
}
原文地址: https://www.cveoy.top/t/topic/nymB 著作权归作者所有。请勿转载和采集!