2023-06-15 21:22:51 +08:00
|
|
|
//
|
|
|
|
// cache.go
|
|
|
|
// Copyright (C) 2022 tiglog <me@tiglog.com>
|
|
|
|
//
|
|
|
|
// Distributed under terms of the MIT license.
|
|
|
|
//
|
|
|
|
|
|
|
|
package gcache
|
|
|
|
|
2023-06-21 10:52:25 +08:00
|
|
|
import (
|
|
|
|
"sync"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/go-redis/redis/v8"
|
|
|
|
)
|
|
|
|
|
2023-06-15 21:22:51 +08:00
|
|
|
type Engine struct {
|
2023-06-21 10:52:25 +08:00
|
|
|
client ICacheAdapter
|
2023-06-15 21:22:51 +08:00
|
|
|
}
|
|
|
|
|
2023-06-21 10:52:25 +08:00
|
|
|
var once sync.Once
|
|
|
|
|
|
|
|
var engine *Engine
|
|
|
|
|
2023-06-15 21:22:51 +08:00
|
|
|
func New(adapter ICacheAdapter) *Engine {
|
2023-06-21 10:52:25 +08:00
|
|
|
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...)
|
2023-06-15 21:22:51 +08:00
|
|
|
}
|