[英]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.