golang支持多后端存储的高性能缓存插件库onecache的使用
Golang支持多后端存储的高性能缓存插件库onecache的使用
OneCache - Go缓存库
OneCache是一个支持多后端存储的Go语言高性能缓存插件库。
安装
$ go get -u github.com/adelowo/onecache
支持的存储后端
- [x] InMemory(内存)
- [x] Filesystem(文件系统)
- [x] Memcached
- [x] Redis
OneCache还带有垃圾回收机制,文件系统和内存适配器会自动清除过期项。
使用示例
文件系统存储示例
package main
import (
"fmt"
"time"
"github.com/adelowo/onecache"
"github.com/adelowo/onecache/filesystem"
)
func main() {
var store onecache.Store
// 创建文件系统存储,指定缓存目录
store = filesystem.MustNewFSStore("/tmp/onecache")
// 设置缓存,key为"profile",值为"Lanre",过期时间为60秒
err := store.Set("profile", []byte("Lanre"), time.Second*60)
if err != nil {
fmt.Println(err)
return
}
// 获取缓存
value, err := store.Get("profile")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(value)) // 输出: Lanre
}
内存存储示例
package main
import (
"fmt"
"time"
"github.com/adelowo/onecache"
"github.com/adelowo/onecache/memory"
)
func main() {
// 创建内存存储
store := memory.NewInMemoryStore()
// 设置缓存
err := store.Set("session", []byte("user123"), time.Minute*10)
if err != nil {
fmt.Println(err)
return
}
// 获取缓存
value, err := store.Get("session")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(value)) // 输出: user123
// 手动触发垃圾回收
store.GC()
}
Redis存储示例
package main
import (
"fmt"
"time"
"github.com/adelowo/onecache"
"github.com/adelowo/onecache/redis"
)
func main() {
// 创建Redis存储
store := redis.NewRedisStore(&redis.Options{
Addr: "localhost:6379",
Password: "", // 无密码
DB: 0, // 默认DB
})
// 设置缓存
err := store.Set("config", []byte("{\"theme\":\"dark\"}"), time.Hour)
if err != nil {
fmt.Println(err)
return
}
// 获取缓存
value, err := store.Get("config")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(value)) // 输出: {"theme":"dark"}
}
垃圾回收
文件系统和内存适配器实现了垃圾回收机制。可以通过调用store.GC()
手动触发,通常建议在定时器中调用:
ticker := time.NewTicker(5 * time.Minute)
go func() {
for range ticker.C {
store.GC()
}
}()
许可证
MIT
更多关于golang支持多后端存储的高性能缓存插件库onecache的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang支持多后端存储的高性能缓存插件库onecache的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
OneCache - Golang多后端存储高性能缓存插件库
OneCache是一个支持多后端存储的高性能缓存库,它提供了统一的API接口来操作不同的缓存后端,包括内存、Redis、Memcached等。
主要特性
- 统一API接口,支持多种后端存储
- 高性能,低延迟
- 支持缓存过期时间设置
- 线程安全
- 简单易用的API设计
安装
go get github.com/adelowo/onecache
基本使用示例
1. 内存缓存
package main
import (
"fmt"
"time"
"github.com/adelowo/onecache"
"github.com/adelowo/onecache/store"
)
func main() {
// 创建内存存储
memStore := store.NewInMemoryStore()
// 创建缓存实例
cache := onecache.New(memStore)
// 设置缓存,10秒过期
err := cache.Set("key1", []byte("value1"), 10*time.Second)
if err != nil {
panic(err)
}
// 获取缓存
val, err := cache.Get("key1")
if err != nil {
panic(err)
}
fmt.Println(string(val)) // 输出: value1
// 删除缓存
err = cache.Delete("key1")
if err != nil {
panic(err)
}
}
2. Redis缓存
package main
import (
"fmt"
"time"
"github.com/adelowo/onecache"
"github.com/adelowo/onecache/store"
)
func main() {
// 创建Redis存储
redisStore := store.NewRedisStore(&store.RedisOptions{
Addr: "localhost:6379",
Password: "", // 无密码
DB: 0, // 默认DB
})
cache := onecache.New(redisStore)
// 设置缓存,1分钟过期
err := cache.Set("user:1001", []byte("{\"name\":\"John\",\"age\":30}"), time.Minute)
if err != nil {
panic(err)
}
// 获取缓存
userData, err := cache.Get("user:1001")
if err != nil {
panic(err)
}
fmt.Println(string(userData)) // 输出: {"name":"John","age":30}
}
3. Memcached缓存
package main
import (
"fmt"
"time"
"github.com/adelowo/onecache"
"github.com/adelowo/onecache/store"
)
func main() {
// 创建Memcached存储
memcachedStore := store.NewMemcachedStore([]string{"localhost:11211"})
cache := onecache.New(memcachedStore)
// 设置缓存,无过期时间
err := cache.Set("config:app", []byte("production"), 0)
if err != nil {
panic(err)
}
// 获取缓存
config, err := cache.Get("config:app")
if err != nil {
panic(err)
}
fmt.Println(string(config)) // 输出: production
}
高级功能
批量操作
// 批量设置
err := cache.SetMulti(map[string][]byte{
"key1": []byte("value1"),
"key2": []byte("value2"),
}, time.Minute)
// 批量获取
values, err := cache.GetMulti([]string{"key1", "key2"})
缓存清理
// 清空所有缓存
err := cache.Flush()
自定义存储后端
你可以实现自己的存储后端,只需要实现store.Store
接口:
type MyCustomStore struct{}
func (m *MyCustomStore) Get(key string) ([]byte, error) {
// 实现获取逻辑
}
func (m *MyCustomStore) Set(key string, value []byte, expires time.Duration) error {
// 实现设置逻辑
}
func (m *MyCustomStore) Delete(key string) error {
// 实现删除逻辑
}
func (m *MyCustomStore) Flush() error {
// 实现清空逻辑
}
// 使用自定义存储
customStore := &MyCustomStore{}
cache := onecache.New(customStore)
性能优化建议
- 对于高频访问的小数据,使用内存缓存
- 对于分布式系统,使用Redis或Memcached
- 合理设置缓存过期时间
- 使用批量操作减少网络开销
- 对于大型对象,考虑压缩后再存储
OneCache提供了简单统一的API来操作不同的缓存后端,使得在应用程序中切换缓存策略变得非常容易,同时保持了高性能的特性。