持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情
基本概念
gcache
模块默认提供的是一个高速的内存缓存,操作效率非常高效,CPU
性能损耗在ns
纳秒级别。
基本使用
package main
import (
"fmt"
"github.com/gogf/gf/os/gcache"
)
func main() {
// 创建一个缓存对象,
// 当然也可以便捷地直接使用gcache包方法
c := gcache.New()
// 设置缓存,不过期
c.Set("k1", "v1", 0)
// 获取缓存
v, _ := c.Get("k1")
fmt.Println(v)
// 获取缓存大小
n, _ := c.Size()
fmt.Println(n)
// 缓存中是否存在指定键名
b, _ := c.Contains("k1")
fmt.Println(b)
// 删除并返回被删除的键值
fmt.Println(c.Remove("k1"))
// 关闭缓存对象,让GC回收资源
c.Close()
}
复制代码
打印结果
缓存控制
package main
import (
"fmt"
"github.com/gogf/gf/os/gcache"
"time"
)
func main() {
// 当键名不存在时写入,设置过期时间1000毫秒
gcache.SetIfNotExist("k1", "v1", 1000*time.Millisecond)
// 打印当前的键名列表
keys, _ := gcache.Keys()
fmt.Println(keys)
// 打印当前的键值列表
values, _ := gcache.Values()
fmt.Println(values)
// 获取指定键值,如果不存在时写入,并返回键值
v, _ := gcache.GetOrSet("k2", "v2", 0)
fmt.Println(v)
// 打印当前的键值对
data1, _ := gcache.Data()
fmt.Println(data1)
// 等待1秒,以便k1:v1自动过期
time.Sleep(time.Second)
// 再次打印当前的键值对,发现k1:v1已经过期,只剩下k2:v2
data2, _ := gcache.Data()
fmt.Println(data2)
}
复制代码
打印结果
缓存淘汰控制
package main
import (
"fmt"
"github.com/gogf/gf/os/gcache"
"time"
)
func main() {
// 设置LRU淘汰数量
c := gcache.New(2)
// 添加10个元素,不过期
for i := 0; i < 10; i++ {
c.Set(i, i, 0)
}
n, _ := c.Size()
fmt.Println(n)
keys, _ := c.Keys()
fmt.Println(keys)
// 读取键名1,保证该键名是优先保留
v, _ := c.Get(1)
fmt.Println(v)
// 等待一定时间后(默认1秒检查一次),
// 元素会被按照从旧到新的顺序进行淘汰
time.Sleep(2 * time.Second)
n, _ = c.Size()
fmt.Println(n)
keys, _ = c.Keys()
fmt.Println(keys)
}
复制代码
打印结果
小技巧
GetOrSetFunc
的使用
GetOrSetFunc
获取一个缓存值,当缓存不存在时执行指定的f func() (interface{}, error)
,缓存该f
方法的结果值,并返回该结果。
总结
这篇文章为大家介绍了gcache的基本使用。单机应用可以使用gcache做缓存处理,分布式应用可以使用gredis做缓存处理,下一篇介绍gredis的使用。
最后
感谢阅读,欢迎大家三连:点赞、收藏、投币(关注)!!!