func New(opts ...Option) Gache {
	return newGache(opts...)
}
New returns Gache (*gache) instance
package gache
import (
	"context"
	"encoding/gob"
	"io"
	"runtime"
	"sync"
	"sync/atomic"
	"time"
	"unsafe"
	"github.com/kpango/fastime"
	"github.com/zeebo/xxh3"
	"golang.org/x/sync/singleflight"
)
type (
	Gache interface {
		Clear()
		Delete(string) (interface{}, bool)
		DeleteExpired(context.Context) uint64
		DisableExpiredHook() Gache
		EnableExpiredHook() Gache
		Foreach(context.Context, func(string, interface{}, int64) bool) Gache
		Get(string) (interface{}, bool)
		GetWithExpire(string) (interface{}, int64, bool)
		Read(io.Reader) error
		Set(string, interface{})
		SetDefaultExpire(time.Duration) Gache
		SetExpiredHook(f func(context.Context, string)) Gache
		SetWithExpire(string, interface{}, time.Duration)
		StartExpired(context.Context, time.Duration) Gache
		Len() int
		ToMap(context.Context) *sync.Map
		ToRawMap(context.Context) map[string]interface{}
		Write(context.Context, io.Writer) error
		Stop()
	}
	gache struct {
		expFuncEnabled bool
		expire         int64
		l              uint64
		cancel         atomic.Value
		expGroup       singleflight.Group
		expChan        chan string
		expFunc        func(context.Context, string)
		shards         [slen]*Map
	}
	value struct {
		expire int64
		val    interface{}
	}
)
const (
	slen = 512
	mask = 0x1FF
)
var (
	instance *gache
	once     sync.Once
)
func init() {
	GetGache()
}