hibernate - 像 ehcache / redis 这样的外部缓存在哪里适合 wrt hibernate level 1 / level 2 缓存?
问题描述
Hibernate(以及作为 Hibernate 的包装器的 JPA)提供了两个级别的缓存机制。a) 一级缓存,位于会话对象层/级别 b) 二级缓存,位于会话工厂层/级别
如果我使用的是 redis 或 ehcache 等外部缓存,那么这个缓存在上面的哪个位置。或者我应该禁用 2 级缓存以启用 redis/ehcache。不确定外部缓存如何以及在何处适合 1 级和 2 级缓存。
或者 - 是否可以进行各种配置?
有人可以解释一下。提前致谢。
解决方案
一级缓存被认为是本地内存缓存,也可以是本地 Redis/Memcache 缓存。二级缓存就像一个代理服务器,它缓存查询的结果,任何服务器的所有后续查询都将提供缓存中的结果(如果可用)。
一级缓存结果仅对一台服务器可用,而二级缓存可以被视为对所有服务器都可用的分布式缓存。如果您的应用程序仅在一台服务器/实例上运行,那么使用 2 级缓存是没有意义的。
您可以考虑为您的数据库使用代理服务器,例如,如果您使用 MySQL,则可以考虑使用 ProxySQL、mysql-proxy 等。
推荐阅读
- mongodb - mongodb管道限制为1
- javascript - 通过 JavaScript 单击 html 提交按钮发送邮件
- excel - Excel 或 Knime - 我如何通过在特定条件下按天循环遍历列来连接
- python - 如何计算字符串中子字符串的最大连续出现次数?
- linux - 是否可以在自动化脚本中运行 bcc/bpftrace 工具?
- android - 在 Android Studio 上创建虚拟设备的错误消息
- javascript - react-query: 反应式 useMutation 结果
- npm - 给定一个 npm 包,我如何知道它是否可以在浏览器中运行?
- c++11 - 如何重载 std::vector
操作员 namespace std { bool operator<(const vector<int>& v1, const vector<int>& v2) { if (v1[0] < v2[0] && v1[1] < v2[1])
- c++ - 制作异步定时器:多线程的效率