Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用清漆缓存动态页面_Php_Apache_Caching_Salesforce_Varnish - Fatal编程技术网

Php 使用清漆缓存动态页面

Php 使用清漆缓存动态页面,php,apache,caching,salesforce,varnish,Php,Apache,Caching,Salesforce,Varnish,我试图在Apache服务器上缓存一个页面,该页面运行一个仪表板,显示通过带有PHP的API从Salesforce db提取的信息 动态如下: 客户机->apache/php/sqlqueries->Salesforce 仪表板包含一些表,这些表重新加载包含查询salesforce的对象的PHP页面 function refreshtable1() { $('#table1').load('/tables/table1.php', function() { setTimeo

我试图在Apache服务器上缓存一个页面,该页面运行一个仪表板,显示通过带有PHP的API从Salesforce db提取的信息

动态如下:

客户机->apache/php/sqlqueries->Salesforce

仪表板包含一些表,这些表重新加载包含查询salesforce的对象的PHP页面

function refreshtable1() {
    $('#table1').load('/tables/table1.php', function() {
        setTimeout(refreshtable1, 60000);
    });
}
为了实现这些查询,table1.php包含一个查询对象和一个salesforce API插件,该插件在每次重新加载和查询时都会登录到salesforce

登录名返回一个会话Id,该Id被放入会话中并在会话到期前重新使用

现在,有30个用户,5个表,每个表有30列,每个用户一个表,显示信息以便共享

每30分钟刷新2个表,每分钟刷新3个表

如果你这样做的话,每天的查询数可能会达到100万次,因为这些家伙一直在打开他们的浏览器。有一个会话处理程序会在一段时间后终止会话,但是如果他们在回家之前刷新了它,它会再运行9个小时

Salesforce管理员现在不太喜欢我

因此,我试图将某种系统或缓存卸载。另外,为了避免必须有一个本地数据库,我在其中复制所有数据,并且要填充的查询的读取速度为每分钟3次

这就是我决定给Varnish cache一个机会的原因

问题是,我看到它没有从缓存将表内容交付给客户端,它看起来确实像是呈现了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
我不确定这是否可行,所以我希望得到任何建议

这是清漆的配置

sub vcl_recv {

    if (!(req.http.host == "test.local")) {
        unset req.http.Cookie;
    }

}
我只是想缓存所有的cookies来保存“PHPSESSID”。我还试图缓存帖子,以防万一,但这也没有真正起作用

if (!(req.method  ~ "GET") && !(req.method  ~ "POST")) {
    return (pass);
}
关于如何让Varnish在这个场景中工作,或者如何使用另一种方法减少查询,有什么想法吗


干杯。

评论中的人说得对,你不应该用清漆,但是如果你没有选择的话,那就去吧。我也用它来解决组织问题

您可以更改vcl_哈希函数,将cookies用作缓存密钥的一部分,请查看它。例如:

sub vcl_hash {
  hash_data(req.http.cookie);
}
你应该注意。我相信您可以避免删除所有您不想用作密钥的cookies。这其中有一个例子


祝你好运。

从源头上解决问题。缓存来自Salesforce的响应。e、 g.使用redis或memcache。如果您想继续使用Varnish,请阅读,但它可能会产生非常恶劣的后果。无法访问后端,salesforce管理员也不行,这就是问题所在,因此需要找到一个中间或前端解决方案,那么您就不走运了。如果您需要保留PHPSESSID以便用户之间不共享响应,则无需缓存任何内容。即使缓存每个用户的响应,也无法在第一时间刷新表,因为您将返回过时的数据。你可以通过降低javascript中的刷新率来达到同样的效果。这是完全正确的,我想改变刷新间隔也会达到同样的效果。我正在查看Apache中的mod_mem_缓存,看看它是否有任何用处。干杯