diff --git a/sys/db/core.go b/sys/db/core.go index 59de21e58..e20b35146 100644 --- a/sys/db/core.go +++ b/sys/db/core.go @@ -1,6 +1,7 @@ package db import ( + "sync" "time" ) @@ -24,6 +25,7 @@ type ( //过期数据 ModelDataExpired struct { key string //主key + mu sync.RWMutex //安全锁 keys map[string]struct{} //数据集合 expired time.Time //过期时间 } diff --git a/sys/db/dbconn.go b/sys/db/dbconn.go index 25dda297b..926328ab8 100644 --- a/sys/db/dbconn.go +++ b/sys/db/dbconn.go @@ -61,7 +61,9 @@ func (this *DBConn) UpDateModelExpired(key string, childs map[string]struct{}, e exp.keys = make(map[string]struct{}) } for k, _ := range childs { + exp.mu.Lock() exp.keys[k] = struct{}{} + exp.mu.Unlock() } } exp.expired = time.Now().Add(expired) @@ -107,9 +109,11 @@ func (this *DBConn) scanning() { for _, v := range temp { pipe.Del(ctx, v.key) if v.keys != nil { + v.mu.RLock() for k1, _ := range v.keys { pipe.Del(ctx, k1) } + v.mu.RUnlock() } } if _, err := pipe.Exec(ctx); err != nil {