enhance(cache):增加缓存关联关系中无效键清理方法。

This commit is contained in:
徐涛
2022-09-06 13:56:30 +08:00
parent 2a07db75c7
commit a1e9167cdf
2 changed files with 62 additions and 0 deletions

50
cache/relation.go vendored
View File

@@ -2,6 +2,7 @@ package cache
import (
"electricity_bill_calc/global"
"fmt"
"strings"
"github.com/rueian/rueidis"
@@ -69,3 +70,52 @@ func AbolishRelation(relationName string) error {
return nil
}
}
func ClearOrphanRelationItems() error {
var (
err error
cursor int64
keys = make([]string, 0)
sKeys []string
)
for {
scanCmd := global.RedisConn.B().Scan().Cursor(cursor).Match(fmt.Sprintf("%s:*", TAG_RELATION)).Count(20).Build()
results := global.RedisConn.Do(global.Ctx, scanCmd)
cursor, sKeys, err = dissembleScan(results)
if err != nil {
return err
}
keys = append(keys, sKeys...)
if cursor == 0 {
break
}
}
var cmds = make(rueidis.Commands, 0)
for _, key := range keys {
relationItemsCmd := global.RedisConn.B().Smembers().Key(key).Build()
results := global.RedisConn.Do(global.Ctx, relationItemsCmd)
relationItems, err := results.AsStrSlice()
if err != nil {
return err
}
for _, item := range relationItems {
exist, err := Exists(item)
if err != nil {
return err
}
if !exist {
cmd := global.RedisConn.B().Srem().Key(key).Member(item).Build()
cmds = append(cmds, cmd)
}
}
}
errs := global.RedisConn.DoMulti(global.Ctx, cmds...)
firstErr, has := lo.Find(errs, func(elem rueidis.RedisResult) bool {
return elem.Error() != nil
})
if has {
return firstErr.Error()
} else {
return nil
}
}