package main
import (
"fmt"
"time"
"github.com/allegro/bigcache/v3"
)
func main() {
config := bigcache.Config{
// 分片数量 必须为2的整数次幂
Shards: 1024,
// 条目可以被驱逐的时间
LifeWindow: 10 * time.Minute,
//删除过期条目的时间间隔(清理)。
//如果设置为<= 0,则不执行任何操作。
//设置为< 1秒会适得其反——bigcache只有1秒的分辨率。
CleanWindow: 5 * time.Minute,
// rps * lifeWindow,仅用于初始内存分配
MaxEntriesInWindow: 1000 * 10 * 60,
// 最大条目大小(以字节为单位),仅在初始内存分配中使用
MaxEntrySize: 500,
// 打印有关额外内存分配的信息
Verbose: true,
//缓存将不会分配超过此限制(以MB为单位)的内存,如果达到值,则可以为新条目覆盖最旧的条目,0值表示没有大小限制
HardMaxCacheSize: 8192,
//当最老的条目由于过期时间或没有剩余空间而被删除时触发回调
//对于新条目,或者因为delete被调用。返回一个表示原因的位掩码。
//默认值为nil,没有回调,会阻止打开最旧的条目。
OnRemove: nil,
// OnRemoveWithReason是一个回调函数,当最老的条目因为过期时间或没有剩余空间而被删除时触发
//对于新条目,或者因为delete被调用。将传递一个表示原因的常量。
//默认值为nil,这意味着没有回调,它会阻止打开最旧的条目。
//如果指定了OnRemove,则忽略。
OnRemoveWithReason: nil,
}
cache, initErr := bigcache.New(context.Background(), config)
if initErr != nil {
fmt.Println(initErr)
}
cache.Set("my-unique-key", []byte("value"))
if entry, err := cache.Get("my-unique-key"); err == nil {
fmt.Println(string(entry))
}
}