Skip to content

生命周期与统计

Processor 提供完整的生命周期管理、缓存控制和健康监控能力。

生命周期

Close

签名:func (p *Processor) Close() error

关闭处理器并释放资源。使用完 Processor 后应调用此方法。

go
processor, _ := json.New(json.DefaultConfig())
defer processor.Close()

IsClosed

签名:func (p *Processor) IsClosed() bool

检查处理器是否已关闭。

go
if processor.IsClosed() {
    // 处理器已关闭,不能再使用
}

缓存管理

ClearCache

签名:func (p *Processor) ClearCache()

清除处理器的内部缓存。

go
processor.ClearCache()

适用于:

  • 数据源发生变化
  • 内存使用过高
  • 需要强制刷新

WarmupCache

签名:func (p *Processor) WarmupCache(jsonStr string, paths []string, cfg ...Config) (*WarmupResult, error)

预热缓存以提高后续操作性能。

go
paths := []string{"user.name", "user.email", "items[*].id"}
result, err := processor.WarmupCache(data, paths)
if err != nil {
    panic(err)
}
fmt.Printf("成功预热 %d 个路径\n", result.Successful)

WarmupResult 结构

go
type WarmupResult struct {
    TotalPaths  int      `json:"total_paths"`            // 总路径数
    Successful  int      `json:"successful"`             // 成功预热的路径数
    Failed      int      `json:"failed"`                 // 失败的路径数
    SuccessRate float64  `json:"success_rate"`           // 成功率(百分比)
    FailedPaths []string `json:"failed_paths,omitempty"` // 失败的路径列表
}
字段类型说明
TotalPathsint总路径数
Successfulint成功预热的路径数
Failedint失败的路径数
SuccessRatefloat64成功率(0-100)
FailedPaths[]string失败的路径列表

统计信息

GetStats

签名:func (p *Processor) GetStats() Stats

获取处理器的统计信息。

go
stats := processor.GetStats()
fmt.Printf("缓存命中率:%.2f%%\n", stats.HitRatio * 100)
fmt.Printf("缓存大小:%d\n", stats.CacheSize)

Stats 结构

go
type Stats struct {
    CacheSize        int64         `json:"cache_size"`        // 缓存条目数
    CacheMemory      int64         `json:"cache_memory"`      // 缓存内存使用(字节)
    MaxCacheSize     int           `json:"max_cache_size"`    // 最大缓存大小
    HitCount         int64         `json:"hit_count"`         // 缓存命中次数
    MissCount        int64         `json:"miss_count"`        // 缓存未命中次数
    HitRatio         float64       `json:"hit_ratio"`         // 缓存命中率
    CacheTTL         time.Duration `json:"cache_ttl"`         // 缓存 TTL
    CacheEnabled     bool          `json:"cache_enabled"`     // 缓存是否启用
    IsClosed         bool          `json:"is_closed"`         // 处理器是否已关闭
    MemoryEfficiency float64       `json:"memory_efficiency"` // 内存效率
    OperationCount   int64         `json:"operation_count"`   // 操作总数
    ErrorCount       int64         `json:"error_count"`       // 错误总数
}
字段类型说明
CacheSizeint64当前缓存条目数
CacheMemoryint64缓存内存使用(字节)
MaxCacheSizeint最大缓存大小限制
HitCountint64缓存命中次数
MissCountint64缓存未命中次数
HitRatiofloat64缓存命中率(0-1)
CacheTTLtime.Duration缓存过期时间
CacheEnabledbool缓存是否启用
IsClosedbool处理器是否已关闭
MemoryEfficiencyfloat64内存效率
OperationCountint64总操作次数
ErrorCountint64总错误次数

健康检查

GetHealthStatus

签名:func (p *Processor) GetHealthStatus() HealthStatus

获取处理器的健康状态。

go
status := processor.GetHealthStatus()
if status.Healthy {
    fmt.Println("处理器健康")
} else {
    for name, check := range status.Checks {
        if !check.Healthy {
            fmt.Printf("检查 %s 失败: %s\n", name, check.Message)
        }
    }
}

HealthStatus 结构

go
type HealthStatus struct {
    Timestamp time.Time              `json:"timestamp"` // 检查时间
    Healthy   bool                   `json:"healthy"`   // 总体健康状态
    Checks    map[string]CheckResult `json:"checks"`    // 各项检查结果
}

type CheckResult struct {
    Healthy bool   `json:"healthy"` // 是否健康
    Message string `json:"message"` // 状态消息
}
字段类型说明
Timestamptime.Time检查时间
Healthybool总体是否健康
Checksmap[string]CheckResult各项检查详情

扩展钩子

AddHook

签名:func (p *Processor) AddHook(hook Hook)

添加操作钩子到处理器。

go
processor.AddHook(&LoggingHook{})
processor.AddHook(json.TimingHook(&MetricsRecorder{}))

钩子会在每次操作前后被调用,可用于:

  • 日志记录
  • 性能监控
  • 指标收集
  • 审计追踪

SetLogger

签名:func (p *Processor) SetLogger(logger *slog.Logger)

设置处理器的日志记录器。用于调试和运行时诊断。

go
processor, _ := json.New()
defer processor.Close()

processor.SetLogger(slog.Default().With("component", "json-processor"))

GetConfig

签名:func (p *Processor) GetConfig() Config

获取处理器当前的配置副本。返回的配置可以安全修改而不影响处理器。

go
processor, _ := json.New()
defer processor.Close()

cfg := processor.GetConfig()
fmt.Printf("缓存启用: %v\n", cfg.EnableCache)
fmt.Printf("最大 JSON 大小:%d\n", cfg.MaxJSONSize)

使用建议

资源管理

go
processor, _ := json.New()
defer processor.Close()  // 确保释放资源

// 使用 processor...

性能优化

go
// 预热常用路径
processor.WarmupCache(data, []string{
    "user.name",
    "user.email",
    "items[*].id",
})

// 定期检查统计
stats := processor.GetStats()
if stats.HitRatio < 0.5 {
    // 命中率低,考虑调整缓存配置
}

监控集成

go
// 定期健康检查
go func() {
    ticker := time.NewTicker(30 * time.Second)
    for range ticker.C {
        status := processor.GetHealthStatus()
        if !status.Healthy {
            log.Printf("Processor unhealthy: %+v", status.Checks)
        }
    }
}()

相关