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

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

大概几百万到一千万个 key

3308 次点击
所在节点    程序员
42 条回复
selca
2023-02-21 13:14:13 +08:00
挪到 redis 去,让 redis 自己优化
Nazz
2023-02-21 13:17:29 +08:00
@selca 要的就是避免网络 IO😂
zoharSoul
2023-02-21 13:19:10 +08:00
没得优化, 等堆外吧. 估计下个版本就出了
fioncat
2023-02-21 13:36:06 +08:00
提供一种思路,如果是容器应用,可以外挂一个 redis sidecar 来储存。通过 socket 进行通信。
同一个 network namespace 下的 socket 通信开销几乎可以忽略的。
我们通过这种方案解决过缓存占用问题,要知道 redis 的优化肯定会比你自己做好的。
Nazz
2023-02-21 13:39:09 +08:00
@zoharSoul 小技巧应该是有的
Nazz
2023-02-21 13:40:03 +08:00
@fioncat 可行性不错, 不知道领导满不满意
8355
2023-02-21 13:54:32 +08:00
同楼上 本质上还是本机应用 开销忽略不计 这样也好维护管理 可用性更高
Nasei
2023-02-21 14:12:08 +08:00
这个量级的 key fastcache 也满足不了吗
Nazz
2023-02-21 14:21:02 +08:00
@Nasei 感觉 freecache 比 fastcache 好. 还在想要不要自研, slice 的 hashmap 和 map + heap 的 ttl 我都造过轮子
Nazz
2023-02-21 14:24:46 +08:00
@Nasei fastcache 也不错, ttl 部分可以自己撸
qieqie
2023-02-21 14:28:48 +08:00
cgo
dqzcwxb
2023-02-21 14:35:14 +08:00
你可以参考 caffeine 实现一个比较完善的本地缓存,如果只需要最简单的 LRU 那么只需要 Linkedhashmap 的数据结构就可以完成
WhereverYouGo
2023-02-21 15:37:15 +08:00
蹲一下
Nazz
2023-02-21 16:08:20 +08:00
@qieqie cgo 太不清真了
zeonll
2023-02-21 16:46:46 +08:00
如果使用 redis side car 的话,还得加一个 redis 的监控?
biubiuF
2023-02-21 16:51:44 +08:00
用大数组存 kv
cheng6563
2023-02-21 17:26:11 +08:00
不如直接用 unix socket 算了,性能高得很。
Nazz
2023-02-21 17:30:04 +08:00
@zeonll 有过期时间不加也没事, pod 本身有内存监控
Nazz
2023-02-21 17:30:46 +08:00
@cheng6563 还是觉得纯 Go 方案优雅些
ToughGuy
2023-02-21 17:46:24 +08:00
leveldb 有 cgo 的封装及原生实现,但是不知道可靠性与原生的 leveldb 相比如何。

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

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

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

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

© 2021 V2EX