一般而言,我对 memcached 和缓存不熟悉。我有一个在 Ubuntu + Tomcat + MySQL 上运行的 Java Web 应用程序,在具有 1GB 内存的 VPS 服务器上。
添加一个大约 256MB 的 memcached 层用于缓存是否有意义?这会不会对服务器造成太大负担?哪个更适合缓存呈现的 html 页面或数据库对象?
请指教。
最佳答案
如果你要缓存页面,不要使用memcached,使用Varnish .但是,很有可能这不是对内存的大量使用。缓存页面以内存换取计算和数据库工作,但它确实每页消耗大量内存,因此它最适用于生成单个页面所需的计算和数据库工作量很大(或页面非常小)的情况!)。此外,如果您想在页面上使用针对每个用户的自定义(例如,显示购物车中的商品数量),请考虑页面缓存将不会有效,甚至不可能。至少不是没有进入一些真正毛茸茸的恶作剧(边缘包括,有人吗?)。
如果您不打算缓存页面,并且您的应用程序在一台机器上,那么使用 memcached 或类似的东西就没有意义。像这样的缓存服务器的目的是让一台机器上的内存作为另一台机器的缓存 - 就像文件服务器如何共享磁盘一样,它们本质上是内存服务器。在单机上,还不如把内存全部交给Java,把对象缓存在堆上。
您使用的是对象关系映射器吗?如果是这样,请查看它是否支持二级缓存。三大实现(Hibernate、OpenJPA 和 EclipseLink)都支持内存缓存。如果您自己进行缓存,他们可能会做得更好。
但是,如果您不使用映射器,您别无选择,只能自己进行缓存。 LinkedHashMap 中有用于构建 LRU 缓存的扩展点,当然还有人们最喜欢的 SoftReference 与 HashMap 的结合。此外,您可能还可以下载和使用缓存实现 - 如果 Apache Commons 库中没有某些内容,我会感到震惊。
关于java - 1GB 内存上的 memcached tomcat mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4925326/