package store import ( "strings" "time" "github.com/allegro/bigcache" "github.com/eko/gocache/lib/v4/cache" "github.com/eko/gocache/lib/v4/store" bigcache_store "github.com/eko/gocache/store/bigcache/v4" redis_store "github.com/eko/gocache/store/redis/v4" "github.com/go-redis/redis/v8" "github.com/spf13/viper" ) var CacheStore store.StoreInterface var CachePrefix string var PersistTTL = 14 * 24 * time.Hour var CacheTTL = 12 * time.Hour func InitStore() { if viper.GetString("redis.addr") != "" { redisStore := redis_store.NewRedis(redis.NewClient(&redis.Options{ Addr: viper.GetString("redis.addr"), Password: viper.GetString("redis.password"), Network: viper.GetString("redis.network"), })) CacheStore = redisStore CachePrefix = strings.TrimRight(viper.GetString("redis.prefix"), ":") } else { bigcacheClient, _ := bigcache.NewBigCache(bigcache.DefaultConfig(PersistTTL)) bigcacheStore := bigcache_store.NewBigcache(bigcacheClient) CacheStore = bigcacheStore } } func NewManager[T any]() *cache.Cache[T] { return cache.New[T](CacheStore) } func MakeKey(keys ...string) string { keys = append([]string{CachePrefix}, keys...) return strings.Join(keys, ":") }