golang支持多后端存储的高性能缓存插件库onecache的使用

Golang支持多后端存储的高性能缓存插件库onecache的使用

OneCache - Go缓存库

OneCache是一个支持多后端存储的Go语言高性能缓存插件库。

Coverage Status Build Status

安装

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

性能优化建议

  1. 对于高频访问的小数据,使用内存缓存
  2. 对于分布式系统,使用Redis或Memcached
  3. 合理设置缓存过期时间
  4. 使用批量操作减少网络开销
  5. 对于大型对象,考虑压缩后再存储

OneCache提供了简单统一的API来操作不同的缓存后端,使得在应用程序中切换缓存策略变得非常容易,同时保持了高性能的特性。

回到顶部