Golang Go语言中 Otter, 兼具高性能与高命中率的内存缓存

发布于 1周前 作者 phonegap100 来自 Go语言

https://github.com/maypok86/otter

推荐一下最近新出的缓存库 Otter ,代码上采用无锁结构提高并发能力,缓存策略上则采用 S3-FIFO ,根据 benchmark 来看命中率相当不错。虽然我不是作者但是因为在 Theine 下有大量讨论我就一直关注着

相关讨论: https://github.com/Yiling-J/theine-go/issues/29

Hacker news: https://news.ycombinator.com/item?id=38745070

最近一直忙着 Dart/Flutter 开发 app 所以 Go 用的少了,等以后有空而且 Otter 用户足够多后,我也许会参考一下把 Theine 也改成无锁结构


Golang Go语言中 Otter, 兼具高性能与高命中率的内存缓存

更多关于Golang Go语言中 Otter, 兼具高性能与高命中率的内存缓存的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

9 回复

Otter 是个开源浏览器的名字,好多年了,你是否考虑一下改名,只是建议,Otter 浏览器跟我没任何关系
https://www.otter-browser.org/

更多关于Golang Go语言中 Otter, 兼具高性能与高命中率的内存缓存的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我也不是作者

otter 最近又优化了吧, 看 benchmark 混合读写速度非常惊人, 我把最小堆去掉估计也赶不上

goos: linux
goarch: amd64
pkg: github.com/lxzan/memorycache/benchmark
cpu: 13th Gen Intel® Core™ i5-1340P
BenchmarkMemoryCache_SetAndGet-4 17393630 79.82 ns/op 0 B/op 0 allocs/op
BenchmarkOtter_SetAndGet-4 36321264 29.74 ns/op 0 B/op 0 allocs/op
BenchmarkRistretto_SetAndGet-4 5968552 179.7 ns/op 32 B/op 1 allocs/op
BenchmarkTheine_SetAndGet-4 5518321 237.0 ns/op 0 B/op 0 allocs/op
PASS
ok github.com/lxzan/memorycache/benchmark 27.342s

应该是一直在优化

不懂就问 不知道性能和这个比如何 https://github.com/patrickmn/go-cache 这个看着很久没维护了

全局 rwmutex 估计只会被秒杀

读多写少也是 mutex 更快

rwmutex 的 scale 能力一直有问题,比如最近我看到的这个 issue https://github.com/cockroachdb/cockroach/issues/109443

针对帖子中提到的“Golang Go语言中 Otter,兼具高性能与高命中率的内存缓存”,以下是我的专业回复:

Otter 确实是一个值得关注的 Go 语言内存缓存库。它专为高性能而设计,能够在高并发的环境下提供出色的吞吐量,这得益于 Go 语言内置的 goroutine 和 channel 机制,使得并发编程变得非常方便和高效。

Otter 的高命中率主要得益于其实现的 S3-FIFO(Segmented FIFO)算法。这种算法通过巧妙地管理缓存中的数据,有效地提高了缓存命中率,从而减少了缓存未命中带来的性能损失。此外,Otter 还支持泛型,这意味着开发者可以使用任何可比较的类型作为缓存的键,并使用任何类型作为值,这大大提高了库的灵活性和可用性。

Otter 的应用场景非常广泛,包括但不限于 Web 应用、微服务架构和实时数据处理等。在 Web 服务器中,Otter 可以用于缓存频繁访问的数据,减少数据库查询次数,提升响应速度。在微服务环境中,它可以作为服务间的缓存层,减少服务调用次数,提高系统整体性能。

综上所述,Otter 是一个兼具高性能与高命中率的 Go 语言内存缓存库,适用于各种需要高性能缓存的场景。

回到顶部