// // cache.go // Copyright (C) 2022 tiglog // // Distributed under terms of the MIT license. // package gcache import ( "sync" "time" "github.com/go-redis/redis/v8" ) type Engine struct { client ICacheAdapter } var once sync.Once var engine *Engine func New(adapter ICacheAdapter) *Engine { once.Do(func() { engine = &Engine{ client: adapter, } }) return engine } func NewWithRedis(rds *redis.Client) *Engine { once.Do(func() { engine = &Engine{ client: NewRedisCacheAdapter(rds), } }) return engine } func (e *Engine) Get(key string, dest interface{}) error { return e.client.Get(key, dest) } func (e *Engine) Set(key string, val interface{}, ttl time.Duration) error { return e.client.Set(key, val, ttl) } func (e *Engine) Has(key string) bool { return e.client.Has(key) } func (e *Engine) Del(keys ...string) (int64, error) { return e.client.Del(keys...) }