This commit is contained in:
cdle
2023-06-14 18:12:25 +08:00
parent 9314209c08
commit b125da91fd
4 changed files with 83 additions and 16 deletions
+26 -16
View File
@@ -27,7 +27,6 @@ var sillyGirl = MakeBucket("sillyGirl")
// } // }
var MakeBucketlocker sync.Mutex var MakeBucketlocker sync.Mutex
var app storage.Bucket
func MakeBucket(name string) storage.Bucket { func MakeBucket(name string) storage.Bucket {
MakeBucketlocker.Lock() MakeBucketlocker.Lock()
@@ -45,7 +44,8 @@ func MakeBucket(name string) storage.Bucket {
// Set = redis.Set // Set = redis.Set
// logs.Info("已使用redis进行数据存储") // logs.Info("已使用redis进行数据存储")
// } // }
app = bkt var app = bkt
isredis := false
if def := bkt.GetString("storage"); def == "redis" { if def := bkt.GetString("storage"); def == "redis" {
func() { func() {
defer func() { defer func() {
@@ -53,6 +53,8 @@ func MakeBucket(name string) storage.Bucket {
if err != nil { if err != nil {
// console.Warn("redis异常,已默认启用boltdb进行数据存储") // console.Warn("redis异常,已默认启用boltdb进行数据存储")
bkt = app bkt = app
} else {
isredis = true
} }
}() }()
bkt = redis.Initsillyplus(app.GetString("redis_addr"), app.GetString("redis_password")) bkt = redis.Initsillyplus(app.GetString("redis_addr"), app.GetString("redis_password"))
@@ -63,24 +65,32 @@ func MakeBucket(name string) storage.Bucket {
} }
logs.Info("默认使用boltdb进行数据存储") logs.Info("默认使用boltdb进行数据存储")
} }
storage.Watch(bkt, "storage", func(old, new, key string) *storage.Final {
storage.Watch(app, "storage", func(old, new, _ string) *storage.Final { if isredis {
if new != "redis" { if new == "boltdb" {
return nil app.Set2(key, new)
} return &storage.Final{
message := "Redis连接成功,重启生效!" Message: "重启生效!",
err := redis.Try(app.GetString("redis_addr"), app.GetString("redis_password")) }
if err != nil {
message = "Redis连接失败,操作无效:" + err.Error()
return &storage.Final{
Error: errors.New(message),
} }
} else { } else {
return &storage.Final{ if new != "redis" {
Message: message, return nil
}
message := "Redis连接成功,重启生效!"
err := redis.Try(app.GetString("redis_addr"), app.GetString("redis_password"))
if err != nil {
message = "Redis连接失败,操作无效:" + err.Error()
return &storage.Final{
Error: errors.New(message),
}
} else {
return &storage.Final{
Message: message,
}
} }
} }
return nil
}) })
storage.Watch(app, "redis_addr", func(old, new, _ string) *storage.Final { storage.Watch(app, "redis_addr", func(old, new, _ string) *storage.Final {
message := "Redis连接成功,重启生效!" message := "Redis连接成功,重启生效!"
+31
View File
@@ -113,6 +113,37 @@ func (bucket *Bucket) Delete() error {
return err return err
} }
func (bucket *Bucket) Set2(key interface{}, value interface{}) (string, error) {
new := ""
msg := ""
k := fmt.Sprint(key)
switch value := value.(type) {
case []byte:
new = string(value)
case string:
new = value
case nil:
default:
new = fmt.Sprint(value)
}
return msg, db.Update(func(tx *bolt.Tx) error {
b, err := tx.CreateBucketIfNotExists([]byte(bucket.name))
if err != nil {
return err
}
if new == "" {
if err := b.Delete([]byte(k)); err != nil {
return err
}
} else {
if err := b.Put([]byte(k), []byte(new)); err != nil {
return err
}
}
return nil
})
}
func (bucket *Bucket) Set(key interface{}, value interface{}) (string, error) { func (bucket *Bucket) Set(key interface{}, value interface{}) (string, error) {
new := "" new := ""
msg := "" msg := ""
+1
View File
@@ -21,6 +21,7 @@ var DisableHandle = func(uuid string) {
type Bucket interface { type Bucket interface {
Set(interface{}, interface{}) (string, error) Set(interface{}, interface{}) (string, error)
Set2(interface{}, interface{}) (string, error)
Copy(string) Bucket Copy(string) Bucket
IsEmpty() (bool, error) IsEmpty() (bool, error)
Size() (int64, error) Size() (int64, error)
+25
View File
@@ -177,6 +177,31 @@ func Get(key string) string {
return v return v
} }
func (bucket *Bucket) Set2(key interface{}, value interface{}) (string, error) {
new := ""
msg := ""
k := fmt.Sprint(key)
switch value := value.(type) {
case []byte:
new = string(value)
case string:
new = value
case nil:
default:
new = fmt.Sprint(value)
}
if !utils.SlaveMode {
if new == "" {
return msg, db.HDel(ctx, bucket.name, k).Err()
} else {
return msg, db.HSet(ctx, bucket.name, k, new).Err()
}
} else {
return toMaster(bucket.name, k, new)
}
}
func (bucket *Bucket) Set(key interface{}, value interface{}) (string, error) { func (bucket *Bucket) Set(key interface{}, value interface{}) (string, error) {
new := "" new := ""
msg := "" msg := ""