繁体   English   中英

Java Web应用程序的二级缓存及其替代品

[英]Second level cache for java web app and its alternatives

在Web应用程序的转换之间,我使用Session对象保存对象。我听说有一个名为memcached的程序,但网站上没有该程序的编译版本,此外,有人认为它有真正的缺点。 现在我想问你。 不同方法的替代方案,利弊是什么? 是否为系统管理员安装了memcached painpul? 从系统管理员的角度来看,将其嵌入到现有的基础架构中很难吗?

使用数据库保存Web应用转换之间的临时数据该怎么办? 这是正常的做法吗?

使用数据库保存Web应用转换之间的临时数据该怎么办? 这是正常的做法吗?

数据库确实已经有一个缓存。 设计良好的应用程序应尝试利用它来减少磁盘IO

数据库缓存在数据级别工作。 这就是为什么其他缓存机制可用于解决不同级别的原因。 在Java级别,您可以使用hibernate的第二级缓存 ,它可以缓存实体和查询结果。 这可以显着减少应用之间的网络IO 服务器和数据库。

然后,您可能需要解决水平可伸缩性 ,即添加服务器来管理负载。 在这种情况下,需要在节点之间分配 2级缓存。 它存在(请参阅JBoss缓存),但是管理起来可能会有些复杂。

如果分布式缓存具有基于键/值的更简单方案,则它们倾向于更好地工作。 这就是memcached ,但还有其他类似的解决方案。 分布式缓存的最大问题是过时条目的失效 -这本身可能会成为性能瓶颈。

不要认为您可以按原样使用分布式缓存来消除性能问题。 设计可扩展的分布式体系结构需要经验,并且总是要在优化与不优化之间进行权衡。

回到您的问题:对于常规应用程序 ,恕我直言,不需要分布式缓存。 体面的磁盘IO和网络IO通常会导致体面的性能。

编辑

对于非持久性对象,您有几种选择:

  • HttpSession 对象需要实现Serializable 会话的确切管理方式取决于容器。 在群集中,会话通常被复制两次,因此,如果一个节点崩溃,您仍然拥有一个副本。 然后存在会话亲缘关系,以将请求路由到内存中具有该会话的服务器。
  • 分布式缓存。 memcached这样的系统可能确实有意义,但是我不知道细节。
  • 数据库。 您当然可以在BLOB转储数据库中的任何Serializable对象。 如果Web服务器不如数据库服务器可靠,则可以选择。

再次,对于常规应用程序 ,我将尝试使用HttpSession

Ehcache怎么样? 这是一种易于使用的纯Java解决方案,可以立即插入Hibernate。 据我记得,它受容器支持。

根据我的经验,这是很轻松的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM