package dorm import ( "context" "time" ) type DBGttStringFunc func() string // SimpleStringCache 缓存 type SimpleStringCache struct { Operation *StringOperation // 操作类 Expire time.Duration // 过期时间 DBGetter DBGttStringFunc // 缓存不存在的操作 DB } // NewSimpleStringCache 构造函数 func (r *RedisClient) NewSimpleStringCache(operation *StringOperation, expire time.Duration) *SimpleStringCache { return &SimpleStringCache{ Operation: operation, // 操作类 Expire: expire, // 过期时间 } } // SetCache 设置缓存 func (c *SimpleStringCache) SetCache(ctx context.Context, key string, value string) { c.Operation.Set(ctx, key, value, WithExpire(c.Expire)).Unwrap() } // GetCache 获取缓存 func (c *SimpleStringCache) GetCache(ctx context.Context, key string) (ret string) { f := func() string { return c.DBGetter() } ret = c.Operation.Get(ctx, key).UnwrapOrElse(f) c.SetCache(ctx, key, ret) return }