package utils import ( "context" "fmt" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/util/gconv" ) func DeleteKeys(ctx context.Context, pattern string) (int, error) { redis := g.Redis() var ( cursor uint64 totalKeys int batchSize = 100 ) g.Log().Debugf(ctx, "开始删除匹配模式 %q 的缓存键", pattern) for { result, err := redis.Do(ctx, "SCAN", cursor, "MATCH", pattern, "COUNT", batchSize) if err != nil { return totalKeys, fmt.Errorf("SCAN 失败: %v", err) } arr := result.Array() fmt.Println("arr:", arr) cursor = gconv.Uint64(arr[0]) rawKeys := gconv.Strings(arr[1]) var keys []string for _, k := range rawKeys { keys = append(keys, k) } fmt.Println("keys:", keys) if len(keys) > 0 { deleted, err := redis.Del(ctx, keys...) if err != nil { g.Log().Warningf(ctx, "缓存删除异常: %v", err) } totalKeys += int(deleted) g.Log().Debugf(ctx, "本次删除 %d/%d 个键", deleted, len(keys)) } if cursor == 0 { break } } return totalKeys, nil }