type RedisCacheAdapter struct {
client *redis.Client
ttl time.Duration
}
func (r *RedisCacheAdapter) SaveFlags(apiKey string, flags flagmint.FeatureFlags) error {
raw, err := json.Marshal(flags)
if err != nil {
return err
}
return r.client.Set(context.Background(), "flagmint:flags:"+apiKey, raw, r.ttl).Err()
}
func (r *RedisCacheAdapter) LoadFlags(apiKey string) (*flagmint.FeatureFlags, error) {
raw, err := r.client.Get(context.Background(), "flagmint:flags:"+apiKey).Bytes()
if err == redis.Nil {
return nil, nil // cache miss
}
if err != nil {
return nil, err
}
var flags flagmint.FeatureFlags
if err := json.Unmarshal(raw, &flags); err != nil {
return nil, err
}
return &flags, nil
}
// ... implement LoadContext and SaveContext similarly ...