pet-house/core/server/cache/index.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()
}