Cache

是否可以返回記憶體的 Web 響應,然後在後台更新它?

  • May 21, 2019

假設我有一個記憶體響應(網路記憶體,完整的 html),我想每 30m 更新一次。問題是,在這 30 分鐘之後,我想為第一個下一個請求提供“舊”記憶體版本,然後在後台刷新該請求的記憶體並重新執行,以便下一個請求將獲得更新的版本。

例如:我有一個記憶體版本的 /whatever.php,它在 15:00 記憶體。然後在 15:30h 之前,對 /whatever.php 的每個請求都會收到該記憶體的 html,而我想要的是 15:30h 之後的第一個請求(即使它是在 18:00 或第二天)收到相同的記憶體版本和然後在後台執行一個執行緒或其他東西來更新記憶體。

我假設這可以通過擁有無限生命週期記憶體並使用強制記憶體更新的標頭來實現,因此除非請求強制更新它,否則記憶體始終為記憶體版本提供服務,但我的問題是:如何照顧在這種情況下的時間限制以及如何從記憶體管理器伺服器發出後台請求(捲曲或其他)?

是否有任何記憶體技術可以讓我做這樣的事情?

在您發表評論後,我想我會將您的問題改寫為:

如何確保我的記憶體將始終包含所有對象並且不會有記憶體未命中?

這通常稱為“記憶體變暖”。

與其依靠(第一個)站點訪問者和站點的受歡迎程度來保持記憶體填充,您自己將(定期和重複地)通過爬取您自己的站點來請求每個頁面和對象。

這假設您的記憶體有足夠的記憶體來記憶體所有對象,並且在第一個對像已經開始從記憶體中過期之前完成對您的站點的爬網。

在更大的站點上使其更可行的一種策略是從後端伺服器設置更長的記憶體到期時間。這將防止對象過快過期,減少需要完成的爬網量,並減少後端伺服器的負載。

(考慮到下面的註釋,您可能希望確保記憶體將記憶體的對象返回給您的站點訪問者的記憶體到期時間比您的後端伺服器為記憶體伺服器設置的時間短得多,這樣訪問者仍然會足夠頻繁地刷新內容. )

一旦您實現了第一個目標並且所有對象將始終載入到記憶體中並且您具有快速響應時間,下一個障礙可能是您對後端內容所做的更新將需要太長時間才能對訪問者可見。 .

理想情況下,您希望在記憶體中的特定對像在後端伺服器上更新後立即選擇性地過期和更新它們,而不是等待它們正常過期或完全清空記憶體並從頭開始重新填充。

Varnish 和其他人專門為此提供支持,通常稱為 HTTP PURGE請求。

發送一個 PURGE 請求,然後發送一個普通的 GET 請求,該對象將在您的記憶體中刷新。甚至已經有特定的外掛可以在發布新文章或修改現有文章時自動為 Wordpress 執行此操作(即https://wordpress.org/plugins/tags/varnish/

引用自:https://serverfault.com/questions/968179