缓存

概念说明
Cache接口:Get/Set/Delete/Has/Close(与 Redis API 对齐)
Item载体:Key/Value/TTL
OptionWithTTL(d)(默认无 TTL = 永久)
cache/memory内置实现:sync.Map + TTL 双路径清理(懒 + 后台周期扫描)
CacheComponentcomponents 适配器:OnStop Close(停后台 goroutine)

自动集成矩阵

集成行为
tracespan cache.get/cache.set/cache.delete/cache.has;attrs: cache,可选 cache_key(默认关闭避免敏感数据)
metricscounter cache_op_total{cache,op,status}(status: hit/miss/ok) + histogram cache_op_duration{cache,op}

使用方式

 1import (
 2    "github.com/go-zeus/zeus/cache"
 3    "github.com/go-zeus/zeus/cache/memory"
 4)
 5
 6c := memory.New(
 7    memory.WithTracer(tracer),
 8    memory.WithMeter(meter),
 9    memory.WithName("user-cache"),
10    memory.WithCleanupInterval(time.Minute), // 默认 60s
11)
12defer c.Close()
13
14_ = c.Set(ctx, "user:1", user, cache.WithTTL(5*time.Minute))
15v, ok := c.Get(ctx, "user:1")  // (user, true) 或 (nil, false)
16_ = c.Delete(ctx, "user:1")

设计权衡

维度选择理由
cache 后台清理60s 默认 + 懒清理兼顾内存与 CPU 开销
cache key 记录默认关闭避免敏感数据进入 trace

接入 Redis

 1import (
 2    "github.com/redis/go-redis/v9"
 3    "github.com/go-zeus/zeus/cache"
 4    redis "github.com/go-zeus/zeus/plugins/cache/redis"
 5)
 6
 7cli := redis.NewClient(&redis.Options{Addr: "127.0.0.1:6379"})
 8c := redis.New(cli, redis.WithTracer(tracer), redis.WithMeter(meter))
 9defer c.Close() // 关闭 client(WithManagedClient(false) 可保留共享 client)
10
11// 复杂类型需自行序列化
12payload, _ := json.Marshal(user)
13_ = c.Set(ctx, "user:1", payload, cache.WithTTL(5*time.Minute))

完整示例参见 examples/14-cache/:Set/Get/Has/Delete/TTL 过期。