forked from free-lancers/electricity_bill_calc_service
		
	enhance(cache):改用普通Key记录查询数量。
This commit is contained in:
		
							
								
								
									
										45
									
								
								cache/count.go
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										45
									
								
								cache/count.go
									
									
									
									
										vendored
									
									
								
							| @@ -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...) | ||||
| 	keys = append(keys, additional...) | ||||
| 	var b strings.Builder | ||||
| 	b.WriteString(TAG_COUNT) | ||||
| 	for _, s := range keys { | ||||
| 		fmt.Fprintf(&b, ":%s", s) | ||||
| 	} | ||||
|  | ||||
| func assembleCountIdentification(additional ...string) string { | ||||
| 	return strings.Join(additional, ":") | ||||
| 	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) | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user