memorycache v1.1.5 update: 写入速度达到 Ristretto 五倍

2023-11-03 14:32:36 +08:00
 Nazz

https://github.com/lxzan/memorycache

https://pkg.go.dev/github.com/lxzan/memorycache

本次更新, 引入了时间戳缓存, 优势进一步扩大:

// 白嫖 github action 做个测试

goos: linux
goarch: amd64
pkg: github.com/lxzan/memorycache/benchmark
cpu: AMD EPYC 7763 64-Core Processor                
BenchmarkMemoryCache_Set-4      11106261    100.6 ns/op	      18 B/op	       0 allocs/op
BenchmarkMemoryCache_Get-4      635988      77.30 ns/op	       0 B/op	       0 allocs/op
BenchmarkRistretto_Set-4        7933663     491.8 ns/op	     170 B/op	       2 allocs/op
BenchmarkRistretto_Get-4        11085688    98.92 ns/op	      18 B/op	       1 allocs/op
PASS
1094 次点击
所在节点    Go 编程语言
29 条回复
Nazz
2023-11-29 17:15:17 +08:00
@matrix1010 otter 作者被你炸出来了
matrix1010
2023-11-29 18:51:07 +08:00
@Nazz 好家伙,这个展开出乎我意料。可能这是 V2EX 为数不多的外国朋友
Nazz
358 天前
@matrix1010 swiss table 的 gc 压力相比内置 map 怎么样?
matrix1010
358 天前
@Nazz 知识盲区,也许这个能参考一下: https://github.com/golang/go/issues/54766
Nazz
358 天前
@matrix1010 可以简单说下 Theine 是怎么维护过期时间和 LFU 吗?
Nazz
358 天前
MC 使用最小四叉堆高效地维护了过期时间, 但是只实现了 LRU, 命中率方面不如 LFU
Nazz
358 天前
我想到了, 再加一个堆, 以查询次数作为比较基准
matrix1010
358 天前
@Nazz Hierarchical Timing Wheels, 我是照着 caffeine 的 java 代码翻译的,也可以 google 。LFU 就复杂些了, 建议去看 W-TinyLFU 的论文。简单来说 frequency 数据是存在 Count-Min Sketch 这种概率类数据结构里的,所以占用空间很小
matrix1010
358 天前
缓存策略相关的论文很多,包括各种改进版的 lru 策略也很多

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/988282

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX