package cache import ( "electricity_bill_calc/global" "strconv" "strings" ) func assembleCountKey(entityName 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, ":") } // 向缓存中缓存模型名称明确的包含指定条件的实体记录数量 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) for _, relationName := range relationNames { CacheRelation(relationName, STORE_TYPE_HASH, countKey, identification) } return result.Error() } // 从缓存中获取模型名称明确的,包含指定条件的实体记录数量 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 } // 删除指定模型名称的数量缓存 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 }