php 使用Varnish缓存动态页面

q8l4jmvw  于 2023-03-16  发布在  PHP
关注(0)|答案(1)|浏览(126)

我尝试在Apache服务器上缓存一个页面,该页面运行一个 Jmeter 板,显示通过API和PHP从Salesforce数据库中提取的信息。
其动态如下所示,
客户端-〉Apache/PHP/SQL查询-〉Salesforce
Jmeter 板包含一些表,这些表重新加载包含查询salesforce的对象的PHP页面。

function refreshtable1() {
    $('#table1').load('/tables/table1.php', function() {
        setTimeout(refreshtable1, 60000);
    });
}

为了进行查询,table1.php包含一个查询对象和一个API插件,每次重新加载和查询时都可以登录到Salesforce。
登录返回一个会话ID,该ID将被放入会话中并在过期之前重复使用。
现在,假设有30个用户,5个表,每个表有30列,每个用户一列,显示信息以便共享。
每30分钟刷新2个表,每分钟刷新3个表。
如果你做的数字可能高达100万查询每天因为这些家伙保持他们的浏览器打开。有一个会话处理程序,杀死会话后一段时间,但如果他们刷新的东西回家前,它运行另一个9小时。
Salesforce管理员现在不太喜欢我。
因此,我试图把某种系统或缓存卸载。也为了避免必须有一个本地数据库,我复制所有和读取从查询填充是每分钟3。
所以我决定给予瓦尼什·卡什一个机会。
问题是,我看到它没有将表内容从该高速缓存中传递到客户端,它看起来确实呈现了HTML部分,但表内容却一直从运行 Jmeter 板站点的后端服务器获取。

~# 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;
    }

}

我只是基本上尝试缓存所有的cookie来保持'PHPSESSID'。我也尝试缓存POST和GET以防万一,但这也没有真正做到这一点。

if (!(req.method  ~ "GET") && !(req.method  ~ "POST")) {
    return (pass);
}

关于如何让Varnish处理这个场景,或者如何用另一种方法减少查询,你有什么想法吗?
干杯。

to94eoyn

to94eoyn1#

评论里的人说的没错,你不应该用清漆,但是如果你没有选择的话,那就去用吧。我也用它来解决组织问题。
您可以更改vcl_hash函数以将cookie用作该高速缓存键的一部分,请查看here。例如:

sub vcl_hash {
  hash_data(req.http.cookie);
}

你应该注意hash colisions。我相信你可以避免它删除所有的cookie,这些cookie不是你想用作密钥的cookie。在这个link中有一个例子。
祝你好运。

相关问题