我想要在Apache服务器上缓存运行仪表板的页面,该页面显示通过API使用API从Salesforce数据库中提取的信息。使用清漆缓存动态页面
动态如下,
clients->阿帕奇/ PHP/sqlqueries->的Salesforce
仪表板在于重新加载包含查询销售人员对象PHP页面表。
function refreshtable1() {
$('#table1').load('/tables/table1.php', function() {
setTimeout(refreshtable1, 60000);
});
}
对于查询到发生,table1.php包括查询对象和销售人员API插件,在登录到Salesforce每个重载和查询。
登录返回一个会话标识,该标识将被放入会话并重复使用,直至到期。
现在有30个用户,5个表格,每个表格有30列,每个用户显示信息以便共享。
2张桌子每隔30分钟刷新一次,每分钟刷新3张桌子。
如果你这样做的话,每天可能会有高达100万次查询的数字,因为这些家伙一直在离开他们的浏览器。会话处理程序会在一段时间后终止会话,但如果它们在回家之前刷新该事件,则会再运行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
我不确定这是否甚至可能,所以我将不胜感激任何建议。
这是光油的conf,
sub vcl_recv {
if (!(req.http.host == "test.local")) {
unset req.http.Cookie;
}
}
我只是基本上是试图缓存所有的cookies,以保持 'PHPSESSID'。我也尝试缓存POST和GET以防万一,但这并没有真正做到这一点。
if (!(req.method ~ "GET") && !(req.method ~ "POST")) {
return (pass);
}
如何得到清漆这种方案或工作如何减少与其他方法查询任何想法?
干杯。
从源头解决问题。缓存来自Salesforce的响应。例如使用redis或memcache。请阅读https://stackoverflow.com/questions/4273734/how-to-make-varnish-ignore-not-delete-cookies如果你想进行清漆,但它可能会有相当不好的后果。 –
无法访问后端,并且salesforce管理员不会这样做,所以需要找到中间或前端解决方案 – eLGusto
然后,您运气不佳。如果您需要保持PHPSESSID,以便用户之间不共享响应,则不需要缓存任何内容。即使您缓存每个用户的响应,但由于您要返回陈旧的数据,因此它将首先刷新表的目的失败。您可以通过减少JavaScript中的刷新率来实现同样的效果。 –