73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
package cache
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"github.com/redis/go-redis/v9"
|
|
"strings"
|
|
"sync"
|
|
"time"
|
|
|
|
"pet-house.com/core/server/viper_server"
|
|
)
|
|
|
|
var ErrRedisInit = errors.New("缓存初始化失败")
|
|
var (
|
|
once sync.Once
|
|
cacheClient redis.UniversalClient
|
|
)
|
|
|
|
// init initialize
|
|
func init() {
|
|
viper_server.Init(getViperConfig())
|
|
}
|
|
|
|
// Instance get instance
|
|
func Instance() redis.UniversalClient {
|
|
once.Do(func() {
|
|
universalOptions := &redis.UniversalOptions{
|
|
Addrs: strings.Split(CONFIG.Addr, ","),
|
|
Password: CONFIG.Password,
|
|
PoolSize: CONFIG.PoolSize,
|
|
DialTimeout: 300 * time.Second,
|
|
DB: CONFIG.DB,
|
|
}
|
|
cacheClient = redis.NewUniversalClient(universalOptions)
|
|
})
|
|
|
|
return cacheClient
|
|
}
|
|
|
|
// SetCache
|
|
func SetCache(key string, value interface{}, expiration time.Duration) error {
|
|
err := Instance().Set(context.Background(), key, value, expiration).Err()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// DeleteCache
|
|
func DeleteCache(key string) (int64, error) {
|
|
return Instance().Del(context.Background(), key).Result()
|
|
}
|
|
|
|
// GetCacheString
|
|
func GetCacheString(key string) (string, error) {
|
|
value, err := GetCacheBytes(key)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return string(value), nil
|
|
}
|
|
|
|
// GetCacheBytes
|
|
func GetCacheBytes(key string) ([]byte, error) {
|
|
return Instance().Get(context.Background(), key).Bytes()
|
|
}
|
|
|
|
// GetCacheUint
|
|
func GetCacheUint(key string) (uint64, error) {
|
|
return Instance().Get(context.Background(), key).Uint64()
|
|
}
|