缓存
go-cache 是一个轻量级的内存缓存库,使用简单且高效,非常适合在 Go 项目中实现本地缓存。它支持自动过期、缓存清理等功能,适合临时数据存储场景。
安装
使用 go get 安装:
bash
go get -u github.com/patrickmn/go-cache基本用法
以下是 go-cache 的基本操作示例:
初始化缓存
go
package main
import (
"fmt"
"time"
"github.com/patrickmn/go-cache"
)
func main() {
// 创建一个缓存对象,默认超时时间为 5 分钟,每 10 分钟清理一次过期数据
c := cache.New(5*time.Minute, 10*time.Minute)
// 设置一个值,带默认超时时间
c.Set("foo", "bar", cache.DefaultExpiration)
// 设置一个值,带自定义超时时间
c.Set("baz", 42, 1*time.Minute)
// 获取值
val, found := c.Get("foo")
if found {
fmt.Println("Found:", val)
} else {
fmt.Println("Key not found")
}
// 删除值
c.Delete("baz")
// 检查值是否存在
_, found = c.Get("baz")
if !found {
fmt.Println("Key 'baz' has been deleted or expired")
}
}主要功能
1. 添加数据
go
c.Set("key", "value", cache.DefaultExpiration)
c.Set("key", "value", 10*time.Second) // 自定义过期时间2. 获取数据
go
value, found := c.Get("key")
if found {
fmt.Println("Value:", value)
} else {
fmt.Println("Key not found")
}3. 删除数据
go
c.Delete("key")4. 延长数据有效期
go
c.Set("key", "value", 10*time.Second)
c.Increment("key", 1)5. 清空缓存
go
c.Flush()高级功能
自动过期
go-cache 支持为每个键设置独立的过期时间。如果键超过有效期,会自动从缓存中清理。
批量操作
可以批量存储和获取数据:
go
items := c.Items()
for k, v := range items {
fmt.Printf("Key: %s, Value: %v\n", k, v.Object)
}存储复杂对象
go-cache 支持存储任意类型的数据,例如结构体:
go
type User struct {
Name string
Email string
}
user := User{Name: "Alice", Email: "alice@example.com"}
c.Set("user", user, cache.DefaultExpiration)
if val, found := c.Get("user"); found {
u := val.(User)
fmt.Println("User:", u.Name, u.Email)
}用例场景
短时缓存 用于存储计算结果,减少重复计算。
配置缓存 将一些配置信息加载到缓存中,减少数据库读取。
令牌验证 缓存用户会话令牌,快速验证请求。
API 缓存 存储外部 API 调用结果,减少请求次数。
注意事项
单机限制
go-cache是单机的内存缓存,适合单实例项目。如果需要分布式缓存,推荐使用 Redis 或 Memcached。内存占用 数据存储在内存中,需控制缓存大小,以免内存溢出。
并发安全
go-cache是线程安全的,可以在多线程环境中使用。
如果需要更多高级功能或结合项目的具体场景,请随时告诉我! 😊