1。源碼下載地址: nginx
https://github.com/cxwshawn/ngx_proxy_store_file_mgrgit
2。介紹:github
1)、nginx-conf目錄:主要實現基於nginx.conf中操做redis數據庫代碼,基於lua實現;大體流程:
golang
獲取cache鎖是不是locked -> 若是是locked,說明文件管理進程正在作lru策略,直接proxy到上游,不操做本地文件;
redis
-> 非locked, 那麼設置redis中sorted set文件訪問時間(即score)
數據庫
redis結構採用hash+sorted set; hash爲md5(uri)->filepath, sortedset 爲:md5(uri)+ngx.now()(score)排序;併發
2)、src目錄:主要採用golang實現的nginx proxy_store的文件管理,主要思想:
lua
目前只統計當磁盤剩餘不超過20%時,經過redis中的sorted set排序結果取百分比的數量依次進行刪除;
spa
3)、配置項:
.net
{
"MaxFileLimit" : 100000, 最大文件數量,超過該數量時作LRU(未實現)
"CheckInterval" : 20, 檢測作LRU的時間間隔
"ExpireDays" : 7, 過時時間超過7day的文件均會刪除
"ErrorLog": true, 是否輸出錯誤日誌
"AccessLog": false, 是否輸入調試日誌
"SortedSetName": "defset", redis中sortedset的名字與access_file.lua文件中的sorte set名字一致
"HashName": "defhash", redis中hash名字與access_file.lua文件中的hash名字一致
"RedisAddr" : "127.0.0.1:6379", redis數據庫的地址
"RoutineCount" : 32 go lru的併發數
}
4)、若有問題,mail到cxwshawn@yeah.net