分布式本地缓存的问题

2022-03-28 11:40:21 +08:00
 Aliberter

项目里现在用的自己实现的二级缓存,一级是基于 ConcurrentHashMap 的本地缓存,二级是 redis 缓存,这就导致了个很严重的问题,不能集群部署,因为一级缓存无法同步,集群部署,服务一切换数据就不一样了,所以想问问大佬们,有没有能支持进程之间(我们还是 docker 部署,docker 容器的进程,不行的话 linux 进程也行,就不用 docker 了)内存( jvm 的堆内存)数据同步的组件,实现成本对于我们现在这个来说也比较低的,有这种东西吗?或者自己怎么改造现有的缓存组件来实现这一目的?

2885 次点击
所在节点    程序员
18 条回复
aper
2022-03-28 11:43:29 +08:00
redis 6.0 client-side cache ,或者自己搭个 MQ 吧
decken
2022-03-28 11:46:22 +08:00
mmap
hangszhang
2022-03-28 13:04:54 +08:00
mq 同步到服务集群更新一级缓存呢?
MoYi123
2022-03-28 14:23:57 +08:00
本地缓存是确实有必要的吗? 最简单的方法是不要用本地缓存.
potatowish
2022-03-28 14:31:53 +08:00
查询频率高、几乎不需要更新的数据才会做进程缓存吧,目的就是为了减少网络和序列化开销,你这种情况应该考虑用分布式缓存
Red998
2022-03-28 14:34:37 +08:00
为什么不是一级 Redis 、二级本地兜底? 本地缓存虽然性能高、但是也有局限性 你用 ConcurrentHashMap 也要考虑内存大小、LRU 清除、定时刷新、缓存不共享问题。本地缓存考虑使用 Caffeine
ikas
2022-03-28 14:38:24 +08:00
10 年前我们用 JGroups 实现分布式同步缓存..到了如今依然没有好的办法
但是人们基本都接受了独立中央缓存这种模式
所以....
cc959798
2022-03-28 14:44:02 +08:00
量不大的话没必要本地缓存
fengjianxinghun
2022-03-28 16:09:00 +08:00
1. 一级进程级 LRU 缓存
2. 二级本机 mmap 共享内存缓存
3. 分布式 redis 缓存
4. 分布式 tidb
5. 分布式 es
zmal
2022-03-28 18:00:29 +08:00
你要同步本地缓存,就大大增加了缓存技术的复杂度,有一点得不偿失。
一般是一级本地缓存过期时间尽量调短一点,损失一定的一致性来换性能。

再说你把本地缓存搞成分布式的,还要二级 redis 干嘛?
wolfie
2022-03-28 18:02:54 +08:00
非要沿用现成方案的话,Redis pub/sub 写一个对 map 修改。
wolfie
2022-03-28 18:03:23 +08:00
现成方案 => 现在的方案。
tramm
2022-03-28 18:04:15 +08:00
多服务器间同步缓存数据, 本质上不就是 Redis 了.
没必要用一级缓存了啊
sunriz
2022-03-28 19:05:59 +08:00
先要问问用本地缓存收益高吗。本地缓存本质上就是用一致性换速度,一般都存静态的东西,或者实时性不敏感的数据。
本地缓存跨机器同步就增加复杂度了,楼上说的对,这本身就是 redis 这种存储组件专门做的事情
wccc
2022-03-28 20:47:52 +08:00
redisson localcachemap
或者 redis 发布订阅更新本地缓存 断开 redis 清空本地缓存
mezi04
2022-03-29 12:24:04 +08:00
Hazelcast 或许能满足你的需求
pumpkin2011
2022-03-29 15:09:13 +08:00
if (time % 10 == 0) {
reload() // async
return oldData
}
orzwalker111
2022-03-29 18:17:42 +08:00
分析实际使用场景,实时性要求很高,用 1 ;否则 2
1 、干掉本地缓存,只用远端缓存
2 、保留本地缓存,本地缓存设置很小的过期时间,1 秒?从本地缓存读数据,过期的话读远端再写本地

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

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

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

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

© 2021 V2EX