1
0
mirror of https://github.com/charlienet/go-mixed.git synced 2025-07-18 00:22:41 +08:00
Files
go-mixed/cache/big_cache.go
2022-06-10 17:04:34 +08:00

76 lines
1.5 KiB
Go

package cache
import (
"errors"
"time"
"github.com/allegro/bigcache/v3"
"github.com/charlienet/go-mixed/logx"
)
var _ MemCache = &bigCacheClient{}
type BigCacheConfig struct {
Shards int
LifeWindow time.Duration
CleanWindow time.Duration
MaxEntriesInWindow int
MaxEntrySize int
HardMaxCacheSize int
log logx.Logger
}
type bigCacheClient struct {
cache *bigcache.BigCache
}
func NewBigCache(c BigCacheConfig) (*bigCacheClient, error) {
config := bigcache.DefaultConfig(time.Minute * 10)
config.LifeWindow = c.LifeWindow
config.LifeWindow = c.LifeWindow
config.CleanWindow = c.CleanWindow
config.MaxEntriesInWindow = c.MaxEntriesInWindow
config.MaxEntrySize = c.MaxEntrySize
config.HardMaxCacheSize = c.HardMaxCacheSize
config.Logger = c.log
if c.Shards > 0 {
config.Shards = c.Shards
}
bigCache, err := bigcache.NewBigCache(config)
if err != nil {
return nil, err
}
return &bigCacheClient{
cache: bigCache,
}, nil
}
func (c *bigCacheClient) Get(key string) ([]byte, error) {
return c.cache.Get(key)
}
func (c *bigCacheClient) Set(key string, entry []byte, expire time.Duration) error {
return c.cache.Set(key, entry)
}
func (c *bigCacheClient) Delete(keys ...string) error {
for _, k := range keys {
if err := c.cache.Delete(k); err != nil {
return err
}
}
return nil
}
func (c *bigCacheClient) Exist(key string) {
}
func (c *bigCacheClient) IsNotFound(err error) bool {
return errors.Is(err, bigcache.ErrEntryNotFound)
}