2013-08-24 106 views
0

我使用.txt文件創建自己的高速緩存系統和緩存時間內是不同的東西,所以這將是更好的不同:PHP:添加時間戳文件名添加VS它的文件

(我用「098f6bcd4621d373cade4e832627b4f6」作爲測試MD5哈希)

a)將所述期滿時間到文件名中像「098f6bcd4621d373cade4e832627b4f6-180.txt」(緩存限於180秒)秒。

b)將過期時間添加到文件的第一行並從第二行開始添加緩存的內容。命名文件只是「098f6bcd4621d373cade4e832627b4f6.txt」。

與a)我必須掃描整個目錄並用「 - 」分解所有文件名並檢查爆炸[0]是否與散列相等。

隨着b)我可以只使用file_exists(),然後讀取第一行,看看緩存是否仍然有效。

我應該使用哪種方法或有哪些方法?

編輯:我不知道是否清楚,但我試圖找到性能明智的最佳方式。

回答

0

是的,還有第三種方法 - 即使是第四種方式 - 使用一些數據庫處理和unlink()

例如:

當你讓你的新的緩存文件,放在一個表中的文件名,和截止日期。然後當你執行你的腳本時,看看是否有效日期是現在,如果是這樣的話,取消鏈接文件。

第四種方法效率不高,但有效。

foreach(glob('files/*') as $file) 
{ 
    if(filemtime($file) < strtotime('-180 seconds')) 
    { 
    unlink($file); 
    } 
} 

我會去你的第一個選項,但有一個更好的格式... expirationDate_crc32hash.file。例如:180_127264de.txt

然後,它會更容易爆炸的_,使用strstr,或者substr

+0

我打算緩存mysql結果,所以我不想使用任何數據庫相關來查找緩存的數據。 緩存文件夾最終可能擁有多達1000個不同的.txt文件。通過遍歷它們比檢查特定散列上的file_exists更有效率,並且僅在文件的第一行讀取到期時間? – unska

+0

不知道這一點,但我的猜測是速度並不快,但PHP很難預測。 – Lurvik

0

是否有可能爲你創建的文件夾(這將是唯一ID?),那麼你內心會創建一個名爲過期日期的文件?我認爲這允許最大的靈活性,對文件夾內的過期日期進行排序,併爲文件的內部預留實際內容。

相關問題