go-cache的基本使用场景示例解析
目录
什么是go-cache使用导入快速开始常量与结构体常量结构体Set()Get()删除其他备份恢复数据什么是go-cache
go-cache 是一个轻量级的基于内存的 K-V 储存组件,内部实现了一个线程安全的 map[string]interface{}
,适用于单机应用。具备如下功能:
这里的 item 指的是 map 里的元素。
go-cache 一般用作临时数据缓存来使用,而不是持久性的数据存储。对于某些停机后快速恢复的场景,go-cache支持将缓存数据保存到文件,恢复时从文件中将数据加载到内存。
【资料图】
使用
导入
github.com/patrickmn/go-cache
快速开始
c := cache.New(10*time.Second, 30*time.Second) // 默认过期时间10s;清理间隔30s,即每30s会自动清理过期的键值对 // 设置一个键值对,过期时间是 3s c.Set("a", "testa", 3*time.Second) // 设置一个键值对,采用 New() 时的默认过期时间,即 10s c.Set("foo", "bar", cache.DefaultExpiration) // 设置一个键值对,没有过期时间,不会自动过期,需要手动调用 Delete() 才能删除 c.Set("baz", 42, cache.NoExpiration) v, found := c.Get("a") fmt.Println(v, found) // testa,true <-time.After(5 * time.Second) // 延时5s v, found = c.Get("a") // nil,false fmt.Println(v, found) <-time.After(6 * time.Second) v, found = c.Get("foo") // nil,false fmt.Println(v, found) v, found = c.Get("baz") // 42,true fmt.Println(v, found)
常量与结构体
常量
const ( NoExpiration time.Duration = -1 // 无有效时间 DefaultExpiration time.Duration = 0 // 表示采用默认时间 )
这两个参数可以用作 New() 函数的第一个入参,则默认过期时间小于0,意味着添加键值对时如果采用默认过期时间,则该键值对不会过期,因为 DeleteExpired() 方法会判断 v.Expiration 是否大于 0,大于 0 时才会自动删除。如果想删除需要手动 Delete() 方法。
添加键值对,比如执行 Set()、Add() 等操作时,这两个常量也可以作为参数,NoExpiration 表示没有过期时间,DefaultExpiration 表示采用默认的过期时间。
结构体
主要的结构体包括下面这些:
type Item struct { // 键值对 Object interface{} // 存放 K-V 的值,可以存放任何类型的值 Expiration int64 // 键值对的过期时间(绝对时间) } type Cache struct { // 对外使用的 Cache *cache // cache 实例 } type cache struct { defaultExpiration time.Duration // 默认的过期时间,添加一个键值对时如果设置默认的过期时间(即代码里的 DefaultExpiration)则会使用到该值 items map[string]Item // 存放的键值对 mu sync.RWMutex // 读写锁 onEvicted func(string, interface{}) // 删除key时的回调函数 janitor *janitor // 定期清理器 定期检查过期的 Item } type janitor struct { // 清理器结构体 Interval time.Duration // 清理时间间隔 stop chan bool // 是否停止 }
Set()
Set()配置key/value对,并附上过期时间。有两个类似的方法Add()和replace()。
区别是,Set()不管key是否存在,都配置。Add()只能用于key不存在的情况,否则报错,replace是反的,只能用于key存在的情况,否则报错。
Get()
获取key/value对,并返回是key是否存在且未过期。GetWithExpiration()相较Get()方法多了个返回过期时间的参数。
删除
删除操作主要有两个,执行删除操作的时候都会判断是否需要执行删除回调函数。
Delete()常规删除,不管是否过期都会删除。
DeleteExpired()用于执行批量删除操作,只会删除已过期的键值对。
其他
ItemCount(),返回所有数据的条数,这里的条数包括已过期但还未被删除的数量;Flush(),清空数据;Items(),返回数据的未过期的数据,可以使用 NewFrom() 恢复数据;备份恢复数据
虽然 go-cache 比较倾向于当做缓存数据来使用,但还是提供了备份数据和恢复数据的操作,数据使用 gob 序列化。
以上就是go-cache的基本使用场景示例解析的详细内容,更多关于go-cache使用场景示例的资料请关注脚本之家其它相关文章!
关键词:
- go-cache的基本使用场景示例解析
- 佳期如梦什么意思
- 塘沽火车站最新规划出炉(塘沽火车站位置在哪 在什么附近)|世界讯息
- 2020赛季中超联赛焦点战在上海绿地申花和上海上港之间展开较量
- 欧西村
- 天天快资讯:蒋溥_关于蒋溥介绍
- 【世界速看料】送戒指的含义是什么意思_送戒指的含义是什么
- 铁路部门加大五一假期运力投放!增开旅客列车1500多列,其中夜间高铁102列
-
成都中考今年将再增5000个普高招生计划并首次设置集中招生咨询点_世界即时看
4月23日,成都市教育局印发了《2023年成都市高中阶段教育学校统一招生考试工作实施规定》。梳理来看,2023
-
血清高密度脂蛋白偏高好吗_血清高密度脂蛋白增高怎么办_讯息
1、 & 039;s病分析:高密度脂蛋白是有益脂蛋白,升高是好事,不需要治疗。2、血清中的高密度脂蛋白(HDL)被认为是
-
天天热点!走进浙江,看荒芜土地重着“绿装”
人民网北京4月23日电(欧阳易佳)2023年4月22日是第54个世界地球日,我国环境发生了翻天覆地的变化。近年来
-
多地学校向市民开放体育场地 家旁操场让健身更方便!
本周二,成都市发布了今年首批学校公共资源向市民开放名单,因地制宜构建市民身边的10分钟健身圈。成都市树
X 关闭
X 关闭