簡體   English   中英

使用“主會話”進行站點范圍的緩存

[英]Using 'master session' for site-wide cache

我一直想向網站添加一個緩存功能,該功能在多個用戶會話之間保持不變。 這個想法是為了能夠存儲頻繁執行的查詢或不經常更改的計算的結果。 我主要的用途是當用戶訪問我的網站時,會運行查詢來查找他們請求的頁面。 頁面很少更改,因此我想為每個用戶將該結果緩存2-4個小時,這樣查詢就不必為每個用戶的每次頁面加載都一遍又一遍地運行。

我所做的是一個存儲當前session_id的PHP對象,每當對緩存對象進行讀取或寫入操作時,它將使用session_write_close()關閉該會話,並使用一個硬編碼的session_id啟動一個新的會話,以讀取/寫入此硬編碼的“主”會話,然后在對主會話進行session_write_close()之后恢復為原始session_id。

有人能想到這種方法有什么問題嗎? 我想避免使用任何過於復雜的功能(例如memecache),所以我認為這很簡單,而且看起來還不錯!

對於方法的想法和其他想法將不勝感激!

與僅使用Memcache相比,此解決方案聽起來更復雜。

此解決方案的主要問題是您正在使用Session來基本上存儲緩存文件。 默認情況下,PHP將會話存儲在文件中,您無需關閉和打開會話。 這是一種更簡單的方法,可讓您以更好的性能完成任務:

  1. 使用filemtime()檢查您的緩存文件是否舊於2個小時:

     if(filemtime($cache_file) > time()-3600*2) 
  2. 如果較舊,則創建PHP緩存對象,然后使用file_put_contents()serialize()將其寫入緩存文件:

     file_put_contents($cache_file, serialize($cache_object)) 
  3. 如果文件太小,則需要2個小時,然后使用file_get_contents()unserialize()檢索PHP Cache對象

     $cache_object = unserialize(file_get_contents($cache_file)) 

暫無
暫無

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

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