From 0307c8b110b703c7787eaee9c45012b1520fe99e Mon Sep 17 00:00:00 2001 From: jianzhiyao Date: Sat, 9 May 2020 17:57:00 +0800 Subject: [PATCH] set static file cahce limit:file size & file count --- staticfile.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/staticfile.go b/staticfile.go index 5d8f4ed4..44bbc418 100644 --- a/staticfile.go +++ b/staticfile.go @@ -105,8 +105,15 @@ type serveContentReader struct { *bytes.Reader } +const ( + //max file size to cache,default: 3m + MaxCacheFileSize int = 1024 * 1024 * 2 + //max file count to cache,default: 100 + MaxCacheFileCount int = 100 +) + var ( - staticFileLruCache, _ = lru.New(1000) + staticFileLruCache, _ = lru.New(MaxCacheFileCount) lruLock sync.RWMutex ) @@ -139,7 +146,9 @@ func openFile(filePath string, fi os.FileInfo, acceptEncoding string) (bool, str return false, "", nil, nil, err } mapFile = &serveContentHolder{data: bufferWriter.Bytes(), modTime: fi.ModTime(), size: int64(bufferWriter.Len()), originSize: fi.Size(), encoding: n} - staticFileLruCache.Add(mapKey, mapFile) + if isOk(mapFile, fi) { + staticFileLruCache.Add(mapKey, mapFile) + } } reader := &serveContentReader{Reader: bytes.NewReader(mapFile.data)} @@ -149,6 +158,8 @@ func openFile(filePath string, fi os.FileInfo, acceptEncoding string) (bool, str func isOk(s *serveContentHolder, fi os.FileInfo) bool { if s == nil { return false + } else if s.size > int64(MaxCacheFileSize) { + return false } return s.modTime == fi.ModTime() && s.originSize == fi.Size() }