github.com/charlienet/go-mixed@v0.3.7/cache/free_cache.go (about)

     1  package cache
     2  
     3  import (
     4  	"errors"
     5  	"time"
     6  
     7  	"github.com/charlienet/go-mixed/bytesconv"
     8  	"github.com/coocood/freecache"
     9  )
    10  
    11  const defaultSize = 10 * 1024 * 1024 // 10M
    12  
    13  var _ MemCache = &freeCache{}
    14  
    15  type freeCache struct {
    16  	cache *freecache.Cache
    17  }
    18  
    19  func NewFreeCache(size int) *freeCache {
    20  	if size < defaultSize {
    21  		size = defaultSize
    22  	}
    23  
    24  	// debug.SetGCPercent(20)
    25  
    26  	c := freecache.NewCache(size)
    27  	return &freeCache{
    28  		cache: c,
    29  	}
    30  }
    31  
    32  func (c *freeCache) Get(key string) ([]byte, error) {
    33  	return c.cache.Get([]byte(key))
    34  }
    35  
    36  func (c *freeCache) Set(key string, value []byte, d time.Duration) error {
    37  	s := int(d.Seconds())
    38  	return c.cache.Set([]byte(key), value, s)
    39  }
    40  
    41  func (c *freeCache) Delete(keys ...string) error {
    42  	for _, k := range keys {
    43  		affected := c.cache.Del(bytesconv.StringToBytes(k))
    44  
    45  		if !affected {
    46  			return errors.New("不存在")
    47  		}
    48  	}
    49  
    50  	return nil
    51  }
    52  
    53  func (c *freeCache) Exist(key string) error {
    54  	return nil
    55  }
    56  
    57  func (c *freeCache) IsNotFound(err error) bool {
    58  	return errors.Is(err, freecache.ErrNotFound)
    59  }