[英]Cache dynamic page with Varnish
我正在尝试在Apache服务器上缓存一个页面,该页面运行一个仪表板,该页面显示通过Salesforce db通过PHP的API从Salesforce数据库获取的信息。
动态如下:
客户端-> Apache / PHP / SQLQUERY-> Salesforce
仪表板包含一些表,这些表可重新加载包含查询salesforce对象的PHP页面。
function refreshtable1() {
$('#table1').load('/tables/table1.php', function() {
setTimeout(refreshtable1, 60000);
});
}
为了进行查询,table1.php包含一个查询对象和一个Salesforce API插件,该插件在每次重新加载和查询时都登录到Salesforce。
登录名返回一个会话ID,该会话ID将放入会话中并重复使用直到过期。
现在,假设有30个用户,每个表有30个列的5个表,每个用户一个显示信息以便可以共享。
每30分钟刷新2个表,每分钟刷新3个表。
如果您这样做的话,每天都会有多达一百万的查询,因为这些家伙一直在打开浏览器。 有一个会话处理程序会在一段时间后终止会话,但是如果他们在回家之前刷新了东西,它将再运行9个小时。
此时,Salesforce管理员不太喜欢我。
因此,我试图将某种系统或缓存卸载。 另外,还可以避免必须在本地数据库中复制所有内容,并且从查询中读取的数据每分钟3次。
这就是为什么我决定给Varnish缓存一个机会的原因。
问题是我看到它没有将表内容从缓存中传递给客户端,看起来确实呈现了HTML部分,但是它不断从运行仪表板站点的后端服务器获取表内容。
~# varnishstat -1 | grep "cache_hit \|cache_miss \|cache_hitpass"
MAIN.cache_hit 44 0.00 Cache hits
MAIN.cache_hitpass 0 0.00 Cache hits for pass.
MAIN.cache_miss 16436 0.59 Cache misses
我不确定这是否有可能,所以我将不胜感激。
这是Varnish conf,
sub vcl_recv {
if (!(req.http.host == "test.local")) {
unset req.http.Cookie;
}
}
我只是基本上试图缓存所有cookie以保留“ PHPSESSID”。 我还尝试缓存POST和GET,以防万一,但实际上也没有成功。
if (!(req.method ~ "GET") && !(req.method ~ "POST")) {
return (pass);
}
关于如何使Varnish在这种情况下工作或如何通过其他方法减少查询的任何想法?
干杯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.