2017-08-11 15 views
1

Apacheサーバー上でSalesforceデータベースからPHPを使用してAPIを使用して取得した情報を表示するダッシュボードを実行するページをキャッシュしようとしています。ワニス付き動的ページをキャッシュする

ダイナミック以下である、

clients->はApache/PHP/sqlqueries-> Salesforceの

ダッシュボードは、Salesforceを照会オブジェクトを含むPHPページをリロードするテーブルで構成されています。そのために

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

に問い合わせる起こり、table1.phpは、クエリオブジェクトとすべてのリロードやクエリにSalesforceへのログインにSalesforceのAPIプラグインを含んでいます。

ログインは、セッションに入れられ、期限が切れるまで再利用されるセッションIDを返します。

ここでは、30人のユーザー、それぞれ30個の列を持つ5つのテーブル、情報を表示する各ユーザーに1つのユーザーが共有できるようになっています。

2つのテーブルは、30分おきにリフレッシュされ、毎分3回リフレッシュされます。

毎回100万件のクエリが表示される場合、この人はブラウザを離れたままにしておきます。しばらくしてからセッションを終了させるセッションハンドラがありますが、家に帰る前にそれらをリフレッシュすると、さらに9時間実行されます。

この時点でSalesforce管理者は私にはあまり好きではありません。

だから私は何らかの種類のシステムやキャッシュをオフロードしようとしています。また、すべてをコピーするローカルDBを持たないようにするには、読み込むデータの読み込みは毎分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 

私もそれが可能なのか分からないので、私は助言に感謝します。

これは私が基本的に「PHPSESSID」を維持するために、すべてのクッキーをキャッシュしようとしているニスconfに、

sub vcl_recv { 

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

} 

です。私はまた、POSTのキャッシュとGETを試みましたが、それは本当にトリックもしませんでした。

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

ワニスは、このシナリオで、または別の方法でクエリを削減する方法で動作するように取得する方法上の任意のアイデア?

乾杯。

+0

ソースで問題を解決します。 Salesforceから回答をキャッシュします。例えばredisまたはmemcacheを使用します。ワニスを続行したい場合はhttps://stackoverflow.com/questions/4273734/how-to-make-varnish-ignore-not-delete-cookiesを読んでください。しかし、それはかなり厄介な結果をもたらすかもしれません。 –

+0

はバックエンドにアクセスできないため、Salesforce管理者はしません。それは問題なので、中間またはフロントエンドの解決策を見つける必要があります – eLGusto

+0

あなたは不運です。応答がユーザー間で共有されないようにPHPSESSIDを保持する必要がある場合は、キャッシュするものはありません。ユーザーごとにレスポンスをキャッシュしても、失効したデータを返すため、最初はテーブルをリフレッシュする目的に反します。あなたは、JavaScriptでリフレッシュレートを減らすことによって同じことを達成することができます。 –

答えて

-1

コメントの人は、それにはワニスを使用すべきではありませんが、選択肢がない場合は、私はそれを組織問題の回避策としても使用してきました。

vcl_hash関数を変更して、キャッシュキーの一部としてクッキーを使用することができます。hereをご覧ください。たとえば、

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

注意してください。hash colisionsに注意してください。私はあなたがキーとして使用したいものではないすべてのクッキーを削除することを避けることができると信じています。このlinkの例があります。

幸運。

関連する問題