Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

📜 cachego

License

cachego 是一个拥有高性能分段锁机制的轻量级内存缓存,拥有懒清理和哨兵清理两种清理机制,可以应用于所有的 GoLang 应用程序中。

Read me in English.

🕹 功能特性

  • 以键值对形式缓存数据,极简的 API 设计风格
  • 使用粒度更细的分段锁机制进行设计,具有非常高的并发性能
  • 支持懒清理机制,每一次访问的时候判断是否过期
  • 支持哨兵清理机制,每隔一定的时间间隔进行清理

历史版本的特性请查看 HISTORY.md。未来版本的新特性和计划请查看 FUTURE.md

🚀 安装方式

cachego 没有任何其他额外的依赖,唯一需要的依赖就是 Golang 运行环境

$ go get -u github.com/FishGoddess/cachego

💡 参考案例

package main

import (
	"fmt"

	"github.com/FishGoddess/cachego"
)

func main() {

	// Create a cache for use.
	cache := cachego.NewCache()

	// Set a new entry to cache.
	cache.Set("key", 666)

	// Get returns the value of this key.
	v, ok := cache.Get("key")
	fmt.Println(v, ok) // Output: 666 true

	// If you want to change the value of a key, just set a new value of this key.
	cache.Set("key", "value")

	// See what value it has.
	v, ok = cache.Get("key")
	fmt.Println(v, ok) // Output: value true

	// If you pass a not existed key to of method, nil and false will be returned.
	v, ok = cache.Get("not existed key")
	fmt.Println(v, ok) // Output: <nil> false
}

更多使用案例请查看 _examples 目录。

🔥 性能测试

测试文件:_examples/performance_test.go

$ go test -v ./_examples/performance_test.go

总缓存数据为 100w 条,并发数为 10w,循环测试写入和读取次数为 50 次

测试环境:R7-4700U CPU @ 2.0 GHZ,16 GB RAM

测试 写入消耗时间 (越小越好) 读取消耗时间 (越小越好) 综合消耗时间 (越小越好)
cachego 3.51 秒 2.93 秒 2.97 秒
go-cache 5.73 秒 2.19 秒 9.78 秒
freeCache 2.43 秒 2.09 秒 2.58 秒

可以看出,由于使用了分段锁机制,写入性能在并发下依然非常高,但是读取性能有些拉跨,这是由于分段锁会多一次定位的操作,如果加锁的消耗小于定位的消耗,那分段锁就不占优势。 这也是为什么 cachego 在写入性能上比 go-cache 强一大截,但是读取性能却落后的原因。后续会着重优化读取性能!

👥 贡献者

如果您觉得 cachego 缺少您需要的功能,请不要犹豫,马上参与进来,发起一个 issue

About

使用 Go 开发的高性能分段锁机制的轻量级内存缓存 - A high-performance and memory-based cache for Go applications

Topics

Resources

License

Packages

No packages published

Languages

You can’t perform that action at this time.