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 }