diff --git a/cache/count.go b/cache/count.go index 9f348bb..7b6d9d3 100644 --- a/cache/count.go +++ b/cache/count.go @@ -1,49 +1,44 @@ package cache import ( - "electricity_bill_calc/global" - "strconv" + "fmt" "strings" + "time" + + "github.com/samber/lo" ) -func assembleCountKey(entityName string) string { +func assembleCountKey(entityName string, additional ...string) string { var keys = make([]string, 0) keys = append(keys, strings.ToUpper(entityName)) - return CacheKey(TAG_COUNT, keys...) -} - -func assembleCountIdentification(additional ...string) string { - return strings.Join(additional, ":") + keys = append(keys, additional...) + var b strings.Builder + b.WriteString(TAG_COUNT) + for _, s := range keys { + fmt.Fprintf(&b, ":%s", s) + } + return b.String() } // 向缓存中缓存模型名称明确的包含指定条件的实体记录数量 func CacheCount(relationNames []string, entityName string, count int64, conditions ...string) error { - countKey := assembleCountKey(entityName) - identification := assembleCountIdentification(conditions...) - cmd := global.RedisConn.B().Hset().Key(countKey).FieldValue().FieldValue(identification, strconv.FormatInt(count, 10)).Build() - result := global.RedisConn.Do(global.Ctx, cmd) + countKey := assembleCountKey(entityName, conditions...) + err := Cache(countKey, lo.ToPtr(count), 5*time.Minute) for _, relationName := range relationNames { - CacheRelation(relationName, STORE_TYPE_HASH, countKey, identification) + CacheRelation(relationName, STORE_TYPE_HASH, countKey) } - return result.Error() + return err } // 从缓存中获取模型名称明确的,包含指定条件的实体记录数量 func RetreiveCount(entityName string, condtions ...string) (int64, error) { - countKey := assembleCountKey(entityName) - identification := assembleCountIdentification(condtions...) - cmd := global.RedisConn.B().Hget().Key(countKey).Field(identification).Build() - result, err := global.RedisConn.Do(global.Ctx, cmd).AsInt64() - if err != nil { - return -1, err - } - return result, nil + countKey := assembleCountKey(entityName, condtions...) + instance, err := Retreive[int64](countKey) + return *instance, err } // 删除指定模型名称的数量缓存 func AbolishCountEntity(entityName string) error { - countKey := assembleCountKey(entityName) - cmd := global.RedisConn.B().Del().Key(countKey).Build() - err := global.RedisConn.Do(global.Ctx, cmd).Error() - return err + pattern := fmt.Sprintf("%s:%s:*", TAG_COUNT, strings.ToUpper(entityName)) + return DeleteAll(pattern) }