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

348 天前
 seraphv3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

© 2021 V2EX