package cache import ( "fmt" "strings" "time" "github.com/samber/lo" ) func assembleCountKey(entityName string, additional ...string) string { var keys = make([]string, 0) keys = append(keys, strings.ToUpper(entityName)) 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, conditions...) err := Cache(countKey, lo.ToPtr(count), 5*time.Minute) for _, relationName := range relationNames { CacheRelation(relationName, STORE_TYPE_KEY, countKey) } return err } // 从缓存中获取模型名称明确的,包含指定条件的实体记录数量 func RetreiveCount(entityName string, condtions ...string) (int64, error) { countKey := assembleCountKey(entityName, condtions...) instance, err := Retreive[int64](countKey) return *instance, err } // 删除指定模型名称的数量缓存 func AbolishCountEntity(entityName string) error { pattern := fmt.Sprintf("%s:%s:*", TAG_COUNT, strings.ToUpper(entityName)) return DeleteAll(pattern) }