使用清漆缓存动态页面



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

动态如下,

client->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 次。

这就是为什么我决定给清漆缓存一个机会。

问题是我看到它没有将表内容从缓存传送到客户端,它看起来确实呈现了 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;
}
}

我只是基本上试图缓存所有cookie以保留"PHPSESSID"。我还尝试缓存 POST 和 GET 以防万一,但这也没有真正解决问题。

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

关于如何让 Varnish 处理这种情况或如何使用另一种方法减少查询的任何想法?

干杯。

评论中的人是对的,你不应该为此使用Varnish,但如果你别无选择,那就去做吧。我也将其用作组织问题的解决方法。

您可以更改vcl_hash函数以将 cookie 用作缓存键的一部分,请在此处查看。例如:

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

您应该注意哈希组合。我相信您可以避免它删除所有不是您想要用作密钥的cookie。此链接中有一个例子。

祝你好运。

最新更新