123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package cache
- import (
- "context"
- "git.nspix.com/golang/kos/util/env"
- "github.com/patrickmn/go-cache"
- "os"
- "time"
- )
- var (
- memCacheDefaultExpired time.Duration
- memCacheCleanupInterval time.Duration
- )
- func init() {
- memCacheDefaultExpired, _ = time.ParseDuration(env.Get("MEMCACHE_DEFAULT_EXPIRED", "1h"))
- memCacheCleanupInterval, _ = time.ParseDuration(env.Get("MEMCACHE_CLEANUP_INTERVAL", "10m"))
- if memCacheDefaultExpired < time.Second*5 {
- memCacheDefaultExpired = time.Second * 5
- }
- if memCacheCleanupInterval < time.Minute {
- memCacheCleanupInterval = time.Minute
- }
- }
- type MemCache struct {
- engine *cache.Cache
- }
- func (cache *MemCache) Try(ctx context.Context, key string, cb LoadFunc) (value any, err error) {
- var (
- ok bool
- )
- if value, ok = cache.engine.Get(key); ok {
- return value, nil
- }
- if cb == nil {
- return nil, os.ErrNotExist
- }
- if value, err = cb(ctx); err == nil {
- cache.engine.Set(key, value, 0)
- }
- return
- }
- func (cache *MemCache) Set(ctx context.Context, key string, value any) {
- cache.engine.Set(key, value, 0)
- }
- func (cache *MemCache) SetEx(ctx context.Context, key string, value any, expire time.Duration) {
- cache.engine.Set(key, value, expire)
- }
- func (cache *MemCache) Get(ctx context.Context, key string) (value any, ok bool) {
- return cache.engine.Get(key)
- }
- func (cache *MemCache) Del(ctx context.Context, key string) {
- cache.engine.Delete(key)
- }
- func NewMemCache() *MemCache {
- return &MemCache{
- engine: cache.New(memCacheDefaultExpired, memCacheCleanupInterval),
- }
- }
|