[英]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.