0

我是开源堆栈的新手,并且一直在使用 hibernate/jpa/jdbc 和 memcache。每个 jdbc 查询我都有一个大型数据集,并且可能会有一些这些大型数据集最终绑定到图表。

但是,我非常关注性能,而不是在每次页面加载时访问数据库以将其显示在我的网页图表上。

是否有一些示例说明如何(memcache、redis、本地或分布式)以及在何处缓存此数据(jSON 或原始结果数据)以加载到内存中?我还需要弄清楚如何刷新缓存,除非它是基于时间的驱逐标记算法(即 30 分钟过期,所以从数据库查询中获取新数据而不是使用缓存或者可能每隔 xhrs/min/ 自动将数据馈送到缓存中) ETC)。?

谢谢!

4

2 回答 2

1

Hibernate 内置了对二级缓存的支持。以 EhCache 为例。

另请参阅:http ://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-cache

于 2013-06-05T06:25:50.533 回答
1

这是典型的问题和解决方案,不是直截了当的。有很多因素决定了你的设计。这是我们前一段时间所做的

  • 由于我们提取数据的查询有点复杂执行大约需要一分钟)和大型数据集,我们从一个批处理中填充了 memcache,该批处理用于每 1 小时从数据库中提取数据并将其推送到 memcached。通过保持过期缓存大于批处理间隔,我们确保缓存中的数据始终位于何处。
  • 还有一个动态缓存的用例,在收到数据请求时,我们首先检查 memcached,如果没有找到数据,则查询数据库,获取数据,将其推送到 memcached 并返回结果。但我建议仅当您的数据库查询简单且足够快而不会导致整体响应不佳时才使用这种方法。
  • 你也可以使用 Hibernat 的二级缓存。有效使用此功能取决于您的数据库架构、查询等。
于 2013-06-05T06:35:08.757 回答