Files
hk4e/dispatch/dao/account_redis.go
flswld 0395dc0bc2 1.MongoDB、Redis兼容集群模式
2.离线数据接口化访问
2023-02-26 23:03:13 +08:00

63 lines
1.5 KiB
Go

package dao
import (
"context"
)
const RedisPlayerKeyPrefix = "HK4E"
const (
AccountIdRedisKey = "AccountId"
AccountIdBegin uint32 = 10000
YuanShenUidRedisKey = "YuanShenUid"
YuanShenUidBegin uint32 = 100000000
)
func (d *Dao) GetNextAccountId() (uint32, error) {
return d.redisInc(RedisPlayerKeyPrefix + ":" + AccountIdRedisKey)
}
func (d *Dao) GetNextYuanShenUid() (uint32, error) {
return d.redisInc(RedisPlayerKeyPrefix + ":" + YuanShenUidRedisKey)
}
func (d *Dao) redisInc(keyName string) (uint32, error) {
var exist int64 = 0
var err error = nil
if d.redisCluster != nil {
exist, err = d.redisCluster.Exists(context.TODO(), keyName).Result()
} else {
exist, err = d.redis.Exists(context.TODO(), keyName).Result()
}
if err != nil {
return 0, err
}
if exist == 0 {
var value uint32 = 0
if keyName == RedisPlayerKeyPrefix+":"+AccountIdRedisKey {
value = AccountIdBegin
} else if keyName == RedisPlayerKeyPrefix+":"+YuanShenUidRedisKey {
value = YuanShenUidBegin
}
var err error = nil
if d.redisCluster != nil {
err = d.redisCluster.Set(context.TODO(), keyName, value, 0).Err()
} else {
err = d.redis.Set(context.TODO(), keyName, value, 0).Err()
}
if err != nil {
return 0, err
}
}
var id int64 = 0
if d.redisCluster != nil {
id, err = d.redisCluster.Incr(context.TODO(), keyName).Result()
} else {
id, err = d.redis.Incr(context.TODO(), keyName).Result()
}
if err != nil {
return 0, err
}
return uint32(id), nil
}