javaweb应用的二级缓存及其替代方案

javaweb应用的二级缓存及其替代方案,java,database,hibernate,servlets,memcached,Java,Database,Hibernate,Servlets,Memcached,在web应用程序的转换之间,我使用会话对象保存对象。 我听说有一个叫做memcached的程序,但网站上没有编译版本, 此外,有些人认为它确实有缺点。 现在我想问你。 不同方法的替代方案、优缺点是什么? memcached painpul是否供系统管理员安装?从系统管理员的角度来看,是否很难将其嵌入现有的基础架构 使用数据库在web应用程序转换之间保存临时数据怎么样? 这是正常的做法吗?怎么样?这是一个易于使用的纯Java解决方案,可以随时插入Hibernate。据我记忆所及,它是由容器支持的

在web应用程序的转换之间,我使用会话对象保存对象。 我听说有一个叫做memcached的程序,但网站上没有编译版本, 此外,有些人认为它确实有缺点。 现在我想问你。 不同方法的替代方案、优缺点是什么? memcached painpul是否供系统管理员安装?从系统管理员的角度来看,是否很难将其嵌入现有的基础架构

使用数据库在web应用程序转换之间保存临时数据怎么样? 这是正常的做法吗?

怎么样?这是一个易于使用的纯Java解决方案,可以随时插入Hibernate。据我记忆所及,它是由容器支持的

根据我的经验,这是相当无痛的

使用数据库保存数据怎么样 web应用程序之间的临时数据 过渡?这是正常的做法吗

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

数据库缓存在数据级别工作。这就是为什么可以使用其他缓存机制来处理不同的级别。在java级别,您可以使用hibernate的第二级缓存,它可以缓存实体和查询结果。这可以显著减少应用程序之间的网络IO。服务器和数据库

然后,您可能需要解决水平可伸缩性问题,即添加服务器来管理负载。在这种情况下,第二级缓存需要跨节点分布。这是存在的(请参阅JBoss缓存),但管理起来可能会稍微复杂一些

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

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

回到您的问题:对于常规应用程序,不需要分布式缓存。良好的磁盘IO和网络IO通常会带来良好的性能

编辑

对于非持久对象,您有几个选项:

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


此页面应该包含您需要的所有内容(希望如此!)

@ewernli感谢您的全面回复。也许我误读了你的回答,但我的应用程序中有一些对象没有被持久化,那么这些对象呢。您的意思是我们可以使用Hibernate设计特定的表来保存这些临时数据,并使用它来代替二级缓存吗?我的观点是,我说的是非持久性对象,它们没有db表示,只在会话生存期内创建,并在应用程序退出时销毁。啊!我确实弄错了,我对我的答案做了一些改进。为什么
HttpSession
对您来说还不够?说实话,我听说使用HttpSession来容纳相对较大的对象不是一个好主意,但阅读了您的答案后,我发现它可以使用,也应该使用。如果有什么事,请纠正我。