代码拉取完成,页面将自动刷新
同步操作将从 水不要鱼/cachego 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
cachego 是一个拥有高性能分段锁机制的轻量级内存缓存,拥有懒清理和哨兵清理两种清理机制,可以应用于所有的 GoLang 应用程序中。
历史版本的特性请查看 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 目录。
$ go test -v ./_examples/performance_test.go
总缓存数据为 100w 条,并发数为 10w,循环测试写入和读取次数为 50 次
测试环境:R7-5800X CPU @ 3.8GHZ GHZ,32 GB RAM
测试 | 写入消耗时间 (越小越好) | 读取消耗时间 (越小越好) | 混合操作消耗时间 (越小越好) |
---|---|---|---|
cachego | 965ms | 949ms | 991ms |
go-cache | 3216ms | 980ms | 4508ms |
freeCache | 954ms | 968ms | 987ms |
可以看出,由于使用了分段锁机制,读写性能在并发下依然非常高,但是分段锁会多一次定位的操作,如果加锁的消耗小于定位的消耗,那分段锁就不占优势。 这也是为什么 cachego 在写入性能上比 go-cache 强一大截,但是读取性能却没强多少的原因。后续会着重优化读取性能!
如果您觉得 cachego 缺少您需要的功能,请不要犹豫,马上参与进来,发起一个 issue。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。