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 app storage.Bucket
func MakeBucket(name string) storage.Bucket {
MakeBucketlocker.Lock()
@@ -45,7 +44,8 @@ func MakeBucket(name string) storage.Bucket {
// Set = redis.Set
// logs.Info("已使用redis进行数据存储")
// }
app = bkt
var app = bkt
isredis := false
if def := bkt.GetString("storage"); def == "redis" {
func() {
defer func() {
@@ -53,6 +53,8 @@ func MakeBucket(name string) storage.Bucket {
if err != nil {
// console.Warn("redis异常,已默认启用boltdb进行数据存储")
bkt = app
} else {
isredis = true
}
}()
bkt = redis.Initsillyplus(app.GetString("redis_addr"), app.GetString("redis_password"))
@@ -63,24 +65,32 @@ func MakeBucket(name string) storage.Bucket {
}
logs.Info("默认使用boltdb进行数据存储")
}
storage.Watch(app, "storage", func(old, new, _ string) *storage.Final {
if new != "redis" {
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),
storage.Watch(bkt, "storage", func(old, new, key string) *storage.Final {
if isredis {
if new == "boltdb" {
app.Set2(key, new)
return &storage.Final{
Message: "重启生效!",
}
}
} else {
return &storage.Final{
Message: message,
if new != "redis" {
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 {
message := "Redis连接成功,重启生效!"
+31
View File
@@ -113,6 +113,37 @@ func (bucket *Bucket) Delete() error {
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) {
new := ""
msg := ""
+1
View File
@@ -21,6 +21,7 @@ var DisableHandle = func(uuid string) {
type Bucket interface {
Set(interface{}, interface{}) (string, error)
Set2(interface{}, interface{}) (string, error)
Copy(string) Bucket
IsEmpty() (bool, error)
Size() (int64, error)
+25
View File
@@ -177,6 +177,31 @@ func Get(key string) string {
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) {
new := ""
msg := ""