Go使用big-cache

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))
	}
}

posted @ 2024-11-14 17:49  朝阳1  阅读(1)  评论(0编辑  收藏  举报