簡體   English   中英

使用Varnish緩存動態頁面

[英]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在這種情況下工作或如何通過其他方法減少查詢的任何想法?

干杯。

評論中的人是對的,您不應為此使用Varnish,但如果您別無選擇,請使用它。 我也將其用作組織問題的解決方法。

您可以更改vcl_hash函數以將cookie用作緩存鍵的一部分,請在此處查看 例如:

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

您應該注意哈希菌 我相信您可以避免刪除所有不希望用作鍵的cookie。 鏈接中有一個示例。

祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM