golang 内存 kv 缓存怎么做 gc 优化?

2023-02-21 13:11:07 +08:00
 Nazz

大概几百万到一千万个 key

3027 次点击
所在节点    程序员
41 条回复
sampeng
2023-02-21 19:01:53 +08:00
rocksdb 。
PiersSoCool
2023-02-21 19:51:19 +08:00
问问是什么样业务 这么时延敏感吗 gc 要多久
777777
2023-02-21 20:06:06 +08:00
https://go.dev/doc/gc-guide 看一遍官方文档,你就会了
kaf
2023-02-21 20:21:32 +08:00
https://github.com/bluele/gcache 是要实现这个?
securityCoding
2023-02-21 20:40:02 +08:00
我工作的原则就是不做任何 gc 优化 233 ,不管是 java 还是 go ,横向拓展就好 233
Nazz
2023-02-21 20:44:01 +08:00
@securityCoding key 太多了还是要优化的
Nazz
2023-02-21 20:44:54 +08:00
@PiersSoCool 不做任何优化太浪费 CPU 和内存
Nazz
2023-02-21 20:46:48 +08:00
@kaf 实现类似的东西
kiddult
2023-02-21 21:05:29 +08:00
直接用现成的 bigcache 、freecache 那类就行,虽然多多少少有点坑,胜在能用
fuxiaohei
2023-02-21 21:06:42 +08:00
最近有文章的 Ristretto 可以看看
Nazz
2023-02-21 21:27:38 +08:00
@kiddult 学习一下它们的实现方式也不错
Nasei
2023-02-21 22:50:10 +08:00
@Nazz 既然准备优化的话,是已经影响性能了?已经做过 profile 了吗?
Nazz
2023-02-21 23:25:31 +08:00
@Nasei 影响比较大
lesismal
2023-02-22 00:17:43 +08:00
如果是通用缓存基础设施,用已有的那几个就可以了。但通用缓存都是走了一道序列化的,如果追求性能,表现会差一些。
如果不是通用缓存则不需要序列化,性能可以最大化,但要根据具体业务结合 kv 类型定制去指针化了。
lesismal
2023-02-22 00:23:16 +08:00
可以搜下几位专家的一些帖子看看,结合自己的数据类型定制+测试优化下就差不多了:
真实环境下大内存 Go 服务性能优化一例
曹大带我学 Go ( 11 )—— 从 map 的 extra 字段谈起
Nazz
2023-02-22 07:23:52 +08:00
Nazz
2023-02-22 07:28:02 +08:00
@lesismal 有空自己写一个玩玩😀
带 TTL 的 ConvurrentMap 和切片实现的 HashMap 我都实现过
janxin
2023-02-22 08:30:44 +08:00
arena 试过了吗?
Nazz
2023-02-22 08:47:55 +08:00
@janxin 没用过
Nazz
2023-02-22 09:00:24 +08:00
@lesismal codec 的开销可以接受

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

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

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

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

© 2021 V2EX