gpt4 book ai didi

java - Java Web 应用及其替代品的二级缓存

转载 作者:搜寻专家 更新时间:2023-10-30 22:21:53 29 4
gpt4 key购买 nike

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

如何使用数据库 来保存网络应用程序转换之间的临时数据?这是正常做法吗?

最佳答案

What about using a database to hold temporary data between web app transitions? Is it a normal practice?

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

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

然后您可能想要解决水平可扩展性,即添加服务器来管理负载。在这种情况下,二级缓存需要在节点之间分布。它存在(请参阅 JBoss 缓存),但管理起来可能会稍微复杂一些。

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

不要认为您可以按原样 使用分布式缓存来使您的性能问题消失。设计可扩展的分布式架构需要经验,并且始终是优化和不优化之间的权衡问题。

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

编辑

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

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

同样,对于常规应用程序,我会尽量使用HttpSession

关于java - Java Web 应用及其替代品的二级缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2453783/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com