Java 我可以只加载一次大量数据并在每次请求时使用它吗?
有没有办法将大数据对象加载到内存中,而内存通常只能在每次请求时加载一次 在Java中,当加载servlet时,您可以在servlet中实例化对象,但一旦它存在,您就可以在任何请求中使用它。下面是一个例子。这可以用PHP实现吗Java 我可以只加载一次大量数据并在每次请求时使用它吗?,java,php,Java,Php,有没有办法将大数据对象加载到内存中,而内存通常只能在每次请求时加载一次 在Java中,当加载servlet时,您可以在servlet中实例化对象,但一旦它存在,您就可以在任何请求中使用它。下面是一个例子。这可以用PHP实现吗 public class SampleServlet extends HttpServlet { private static HugeGraphObject hgo; public void init() { hgo = HugeGraphObjec
public class SampleServlet extends HttpServlet {
private static HugeGraphObject hgo;
public void init() {
hgo = HugeGraphObjectFactory.get();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String param = request.getParameter("q");
response.getWriter().write(hgo.getSomeThing(param));
}
}
我相信PHP不是服务器端,所以浏览器每次都会读取和处理。。。(如果我没弄错的话);) 您可以将其缓存在APC中。像这样的,
$hgo = apc_fetch("hgo_v1");
if (!$hgo) {
$hgo = HugeGraphObjectFactory();
apc_store("hgo_v1", $hgo);
}
这样,每个服务器实例只需加载一次对象。使用。在PHP中,每次访问服务器都是唯一的。您本质上是在谈论缓存。为了做到这一点,您需要使用PHP缓存解决方案之一——APC、XCache、memcached。有很多很棒的文章从基准测试的角度比较了这些解决方案。Memcached可以跨服务器使用,这就是它如此流行的原因
我个人使用了memcached和XCache。如果使用得当,存储对象和变量可以将开销减少一半以上。看看Zend_Cache(),它是一个跨平台(APC、XCache等)处理缓存的类。当使用Zend_Cache时,从APC切换到XCache,或基于文件切换到memcached,只需更改一个字符串即可。正如其他人所说,分配给PHP的内存会被吹走,并针对每个请求重新初始化-因此,您希望在单个请求之外保留的任何数据都需要存储在此处。这也意味着将其加载回PHP变量以服务请求时会有很大的开销 如果您试图使用PHP编写Java程序,那么您不会走得很远。这并不是PHP的失败——如果您试图用Java编写C程序或用Forth编写Lisp程序,那么您也会遇到同样的问题。我认为,通过重构/将数据推送到相关存储介质并有效地查询,很有可能解决这个问题 有些非常不寻常的情况并非如此(不要认为这是对您的方法的认可)。在这里,解决问题的方法是开发一个守护进程,为客户端程序提供服务——但是如果使用OO编写,那么要小心内存管理(您可以考虑使用循环引用检查垃圾收集器)。
C.请删除“java”标记,因为这是一个php问题。也很好!这里可以找到一个很好的例子: