2015-11-10 44 views
0

我正在尋找一種簡單的方法來緩存我使用request-promise庫提取的HTML。使用request-promise和Node.js緩存HTML

我過去這樣做的方式是指定一個time-to-live說有一天。然後我將參數傳遞給請求,並將它們散列。然後,無論何時提出請求,我都會將文件系統上的HTML內容保存在特定文件夾中,並將該文件命名爲hashunix時間戳。然後,當請求使用相同的參數時,我會檢查緩存是否仍然通過時間戳相關並將其拉出或發出新請求。

是否有任何庫可以幫助這個可以包裝請求?請求是否有一種方法可以在本地執行此操作?

+0

有沒有你不使用支持生存時間的關鍵值存儲,說[Redis的(http://redis.io/commands/expire)或原因[Memcached的(HTTP:/ /docs.libmemcached.org/memcached_set.html)?似乎你可以節省大量的文件系統操作,並且密鑰可能只是你的散列。 –

+0

@YetAnotherUserName你是否建議將整個HTML頁面放到redis中並將密鑰設置爲散列? – ThomasReggi

回答

0

我和recco一起在評論中使用了Redis。請注意,這僅適用於獲取請求。

/* cached requests */ 
async function cacheRequest(options){ 
    let stringOptions = JSON.stringify(options) 
    let optionsHashed = crypto.createHash('md5').update(stringOptions).digest('hex') 
    let get = await client.getAsync(optionsHashed) 
    if (get) return get 
    let HTML = await request.get(options) 
    await client.setAsync(optionsHashed, HTML) 
    return HTML 
}