【问题标题】:memcached tomcat mysql on 1GB RAM1GB RAM 上的 memcached tomcat mysql
【发布时间】:2011-02-08 07:48:39
【问题描述】:

我是 memcached 和一般缓存的新手。我有一个在 Ubuntu + Tomcat + MySQL 上运行的 Java Web 应用程序,它位于具有 1GB 内存的 VPS 服务器上。

添加一个大约 256MB 的 memcached 层用于缓存是否有意义?这会对服务器造成太大的负担吗?缓存渲染的 html 页面和数据库对象哪个更合适?

请指教。

【问题讨论】:

  • 您的后一个问题是一个过于宽泛的主题,完全取决于许多因素。

标签: java caching memcached


【解决方案1】:

如果你要缓存页面,不要使用 memcached,使用Varnish。但是,很有可能这不是对内存的大量使用。缓存页面会用内存换取计算和数据库工作,但每页确实会消耗大量内存,因此最好用于生成单个页面所需的计算和数据库工作量很大(或页面非常小)的情况!)。此外,如果您想在您的页面上使用每个用户的自定义(例如显示购物车中的商品数量),请考虑页面缓存不会有效,甚至是不可能的。至少在不涉及一些真正令人毛骨悚然的恶作剧的情况下(边缘包括,有人吗?)。

如果您不打算缓存页面,并且您的应用程序位于单台计算机上,那么使用 memcached 或类似的东西是没有意义的。像这样的缓存服务器的目的是让一台机器上的内存作为另一台机器的缓存 - 就像文件服务器如何共享磁盘一样,它们本质上是内存服务器。在单机上,你还不如把所有的内存给Java,把对象缓存在堆上。

您使用的是对象关系映射器吗?如果有,看看它是否支持二级缓存。三大实现(Hibernate、OpenJPA 和 EclipseLink)都支持内存缓存。如果您自己进行缓存,它们可能会比您做得更好。

但是,如果您不使用映射器,则别无选择,只能自己进行缓存。 LinkedHashMap 中有用于构建 LRU 缓存的扩展点,当然还有人们最喜欢的 SoftReference 与 HashMap 的组合。另外,您可能可以下载和使用缓存实现——如果 Apache Commons 库中没有任何东西,我会感到震惊。

【讨论】:

  • 我尝试了页面缓存,但由于页面上的用户特定元素而无法做到这一点。我使用休眠。目前使用 EHCache 作为二级缓存。所以,我想我现在最好使用 EHCache。
【解决方案2】:

memcached 不会在您的服务器上增加任何明显的负载,但它将是您的应用程序无法使用的内存。如果您只打算在一段时间内拥有一个应用服务器,则最好使用 in-JVM 缓存。

至于要缓存的什么,答案落在上述中间的某个地方。您不想准确缓存数据库中的内容,当然也不想缓存最终输出。您的应用程序中的数据模型表示与数据库中的不完全一致(例如,User 对象可能由来自几个不同表的多个查询组成)。缓存这类东西,因为它最可重用。

memcached site 中有很多信息可以帮助您理解和开始使用一般的缓存,特别是 memcached。

【讨论】:

    【解决方案3】:

    这样做可能很有意义,为什么不尝试 64 MB 等较小的大小,看看效果如何。当您为 memcache 使用更多资源时,其他所有资源都会减少。您应该尝试一下,看看什么能给您带来最佳性能。

    【讨论】:

      猜你喜欢
      • 2015-01-01
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      相关资源
      最近更新 更多