项目里现在用的自己实现的二级缓存,一级是基于 ConcurrentHashMap 的本地缓存,二级是 redis 缓存,这就导致了个很严重的问题,不能集群部署,因为一级缓存无法同步,集群部署,服务一切换数据就不一样了,所以想问问大佬们,有没有能支持进程之间(我们还是 docker 部署,docker 容器的进程,不行的话 linux 进程也行,就不用 docker 了)内存( jvm 的堆内存)数据同步的组件,实现成本对于我们现在这个来说也比较低的,有这种东西吗?或者自己怎么改造现有的缓存组件来实现这一目的?
1
aper 142 天前
redis 6.0 client-side cache ,或者自己搭个 MQ 吧
|
![]() |
2
decken 142 天前
mmap
|
![]() |
3
hangszhang 142 天前
mq 同步到服务集群更新一级缓存呢?
|
![]() |
4
MoYi123 142 天前
本地缓存是确实有必要的吗? 最简单的方法是不要用本地缓存.
|
![]() |
5
potatowish 142 天前
查询频率高、几乎不需要更新的数据才会做进程缓存吧,目的就是为了减少网络和序列化开销,你这种情况应该考虑用分布式缓存
|
![]() |
6
redorblacck886 142 天前
为什么不是一级 Redis 、二级本地兜底? 本地缓存虽然性能高、但是也有局限性 你用 ConcurrentHashMap 也要考虑内存大小、LRU 清除、定时刷新、缓存不共享问题。本地缓存考虑使用 Caffeine
|
![]() |
7
ikas 142 天前
10 年前我们用 JGroups 实现分布式同步缓存..到了如今依然没有好的办法
但是人们基本都接受了独立中央缓存这种模式 所以.... |
![]() |
8
cc959798 142 天前
量不大的话没必要本地缓存
|
9
fengjianxinghun 141 天前
1. 一级进程级 LRU 缓存
2. 二级本机 mmap 共享内存缓存 3. 分布式 redis 缓存 4. 分布式 tidb 5. 分布式 es |
10
zmal 141 天前
你要同步本地缓存,就大大增加了缓存技术的复杂度,有一点得不偿失。
一般是一级本地缓存过期时间尽量调短一点,损失一定的一致性来换性能。 再说你把本地缓存搞成分布式的,还要二级 redis 干嘛? |
![]() |
11
wolfie 141 天前
非要沿用现成方案的话,Redis pub/sub 写一个对 map 修改。
|
![]() |
12
wolfie 141 天前
现成方案 => 现在的方案。
|
![]() |
13
tramm 141 天前
多服务器间同步缓存数据, 本质上不就是 Redis 了.
没必要用一级缓存了啊 |
14
sunriz 141 天前
先要问问用本地缓存收益高吗。本地缓存本质上就是用一致性换速度,一般都存静态的东西,或者实时性不敏感的数据。
本地缓存跨机器同步就增加复杂度了,楼上说的对,这本身就是 redis 这种存储组件专门做的事情 |
![]() |
15
wccc 141 天前 via iPhone
redisson localcachemap
或者 redis 发布订阅更新本地缓存 断开 redis 清空本地缓存 |
![]() |
16
mezi04 141 天前
Hazelcast 或许能满足你的需求
|
17
pumpkin2011 140 天前
if (time % 10 == 0) {
reload() // async return oldData } |
![]() |
18
orzwalker111 140 天前
分析实际使用场景,实时性要求很高,用 1 ;否则 2
1 、干掉本地缓存,只用远端缓存 2 、保留本地缓存,本地缓存设置很小的过期时间,1 秒?从本地缓存读数据,过期的话读远端再写本地 |