Spring data JPA 开启二级缓存,分布式部署一般用什么方案?

2024-01-05 16:50:58 +08:00
 seraphv3

本小白程序员是写 java 的,但是工作了多年,用到真正的面向对象技术的机会比较少,所以去年自己做了一个面向对象的简单 demo 项目。

https://zhuanlan.zhihu.com/p/605481077

用的 Spring data JPA ,比较能够符合面向对象的风格。所谓 JPA ,java persistence architecture ,这个 persistence 就很有面向对象的味道,对象活在内存中,但是也需要在合适的时候持久化到数据库。

不过 Spring data JPA 的二级缓存才是活在内存中的对象,如果要分布式集群部署服务,一般怎么实现二级缓存的对象共享呢?

5433 次点击
所在节点    Java
45 条回复
fkdog
2024-01-05 16:53:59 +08:00
为什么要上二级缓存?
wysnxzm
2024-01-05 16:54:02 +08:00
jetcache
seraphv3
2024-01-05 17:01:06 +08:00
@fkdog 没有二级缓存的话,每次查询操作都是查库重新创建对象,而不是直接查内存中的对象,感觉不是真正的面向对象
seraphv3
2024-01-05 17:01:20 +08:00
@wysnxzm 感谢感谢,我学习下
fkdog
2024-01-05 17:17:03 +08:00
@seraphv3 加不加缓存跟是不是面向对象又有什么关系。
fkdog
2024-01-05 17:20:07 +08:00
@seraphv3 看你的描述是感觉对 jpa 、hibernate 并不熟悉。
建议是没经验还是别折腾这个,把控不好,缓存事务一致性可以让你喝一壶的,往严重说了就是生产事故了。
二级缓存你可以在服务层或者展示层实现。
seraphv3
2024-01-05 17:21:53 +08:00
@fkdog 我理解的面向对象,对象都是活在内存里的,只是在必要时候才持久化到数据库
Ayanokouji
2024-01-05 17:22:15 +08:00
缓存就用 redis 吧,多实例也能生效
fkdog
2024-01-05 17:23:52 +08:00
@seraphv3 6666
shigure00
2024-01-05 17:32:25 +08:00
@seraphv3 不明白你为什么会这么理解
quainter
2024-01-05 17:38:27 +08:00
完全错误的面向对象理解
seraphv3
2024-01-05 17:38:51 +08:00
@shigure00 面向对象是要有一个类图,形成对象模型的嘛,对象模型是可运行的,就需要对象存活在内存里面啊
Plutooo
2024-01-05 17:40:15 +08:00
你是不是把面向对象的“对象”和 Java 虚拟机中堆内存中的“对象”给搞混了,二者并不是一个概念
seraphv3
2024-01-05 17:43:18 +08:00
@Plutooo java 的对象不就是面向对象的实现嘛
Leviathann
2024-01-05 17:48:53 +08:00
请求过来然后从数据库里查询出来不就进到内存里了?
aibx01
2024-01-05 17:50:57 +08:00
不要执着于 面向对象 还是 非面向对象。

想想自己要处理什么问题。
如果要做分布式集群部署。那么就是需要一个统一的缓存中心。redis 支持集群部署并且与应用实例无关。
你使用二级缓存相当于每台机器都部署一个 redis 。这些缓存无法保持同步的更新,无法保持同步销毁。除非你手写代码进行支持哈。
seraphv3
2024-01-05 17:55:54 +08:00
@Leviathann 每次都查库,如果还有 @OneToMany 等多级关联查询,性能是个问题

QQ 群里有老哥说级联查询不会走二级缓存,不知道是不是真的

[少侠] 精通所有技术的马总监(568662344) 17:29:14
级联操作 不走缓存 findById 索引操作 没有必要走缓存

[少侠] 精通所有技术的马总监(568662344) 17:29:33
结论 使用 springDataJPA 不需要关注自身的缓存
seraphv3
2024-01-05 18:00:19 +08:00
@aibx01 工作中没有用过 Spring Data JPA ,只是学习下
daybreakfangyang
2024-01-05 18:38:14 +08:00
你想要对象一直活着?
28Sv0ngQfIE7Yloe
2024-01-05 18:42:07 +08:00
@daybreakfangyang

OP 似乎是需要映射数据库表实体的( tableInfo )对象一直存活

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

https://tanronggui.xyz/t/1006228

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

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

© 2021 V2EX