mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-02-13 23:02:27 +08:00
1.MongoDB、Redis兼容集群模式
2.离线数据接口化访问
This commit is contained in:
@@ -27,7 +27,7 @@ func (d *Dao) InsertAccount(account *model.Account) (primitive.ObjectID, error)
|
||||
|
||||
func (d *Dao) UpdateAccountFieldByFieldName(fieldName string, fieldValue any, fieldUpdateName string, fieldUpdateValue any) (int64, error) {
|
||||
db := d.db.Collection("account")
|
||||
updateCount, err := db.UpdateOne(
|
||||
updateCount, err := db.UpdateMany(
|
||||
context.TODO(),
|
||||
bson.D{
|
||||
{fieldName, fieldValue},
|
||||
|
||||
@@ -22,7 +22,13 @@ func (d *Dao) GetNextYuanShenUid() (uint32, error) {
|
||||
}
|
||||
|
||||
func (d *Dao) redisInc(keyName string) (uint32, error) {
|
||||
exist, err := d.redis.Exists(context.TODO(), keyName).Result()
|
||||
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
|
||||
}
|
||||
@@ -33,12 +39,22 @@ func (d *Dao) redisInc(keyName string) (uint32, error) {
|
||||
} else if keyName == RedisPlayerKeyPrefix+":"+YuanShenUidRedisKey {
|
||||
value = YuanShenUidBegin
|
||||
}
|
||||
err := d.redis.Set(context.TODO(), keyName, value, 0).Err()
|
||||
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
|
||||
}
|
||||
}
|
||||
id, err := d.redis.Incr(context.TODO(), keyName).Result()
|
||||
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
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package dao
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"hk4e/common/config"
|
||||
"hk4e/pkg/logger"
|
||||
@@ -13,13 +14,15 @@ import (
|
||||
)
|
||||
|
||||
type Dao struct {
|
||||
mongo *mongo.Client
|
||||
db *mongo.Database
|
||||
redis *redis.Client
|
||||
mongo *mongo.Client
|
||||
db *mongo.Database
|
||||
redis *redis.Client
|
||||
redisCluster *redis.ClusterClient
|
||||
}
|
||||
|
||||
func NewDao() (r *Dao) {
|
||||
r = new(Dao)
|
||||
|
||||
clientOptions := options.Client().ApplyURI(config.GetConfig().Database.Url).SetMinPoolSize(10).SetMaxPoolSize(100)
|
||||
client, err := mongo.Connect(context.TODO(), clientOptions)
|
||||
if err != nil {
|
||||
@@ -33,18 +36,37 @@ func NewDao() (r *Dao) {
|
||||
}
|
||||
r.mongo = client
|
||||
r.db = client.Database("dispatch_hk4e")
|
||||
r.redis = redis.NewClient(&redis.Options{
|
||||
Addr: config.GetConfig().Redis.Addr,
|
||||
Password: config.GetConfig().Redis.Password,
|
||||
DB: 0,
|
||||
PoolSize: 10,
|
||||
MinIdleConns: 1,
|
||||
})
|
||||
err = r.redis.Ping(context.TODO()).Err()
|
||||
|
||||
r.redis = nil
|
||||
r.redisCluster = nil
|
||||
redisAddr := strings.ReplaceAll(config.GetConfig().Redis.Addr, "redis://", "")
|
||||
if strings.Contains(redisAddr, ",") {
|
||||
redisAddrList := strings.Split(redisAddr, ",")
|
||||
r.redisCluster = redis.NewClusterClient(&redis.ClusterOptions{
|
||||
Addrs: redisAddrList,
|
||||
Password: config.GetConfig().Redis.Password,
|
||||
PoolSize: 10,
|
||||
MinIdleConns: 1,
|
||||
})
|
||||
} else {
|
||||
r.redis = redis.NewClient(&redis.Options{
|
||||
Addr: redisAddr,
|
||||
Password: config.GetConfig().Redis.Password,
|
||||
DB: 0,
|
||||
PoolSize: 10,
|
||||
MinIdleConns: 1,
|
||||
})
|
||||
}
|
||||
if r.redisCluster != nil {
|
||||
err = r.redisCluster.Ping(context.TODO()).Err()
|
||||
} else {
|
||||
err = r.redis.Ping(context.TODO()).Err()
|
||||
}
|
||||
if err != nil {
|
||||
logger.Error("redis ping error: %v", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
@@ -53,7 +75,11 @@ func (d *Dao) CloseDao() {
|
||||
if err != nil {
|
||||
logger.Error("mongo close error: %v", err)
|
||||
}
|
||||
err = d.redis.Close()
|
||||
if d.redisCluster != nil {
|
||||
err = d.redisCluster.Close()
|
||||
} else {
|
||||
err = d.redis.Close()
|
||||
}
|
||||
if err != nil {
|
||||
logger.Error("redis close error: %v", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user