mirror of
https://github.com/astaxie/beego.git
synced 2024-11-22 13:30:56 +00:00
set static file cahce limit:file size & file count
This commit is contained in:
parent
af19822293
commit
0307c8b110
@ -105,8 +105,15 @@ type serveContentReader struct {
|
|||||||
*bytes.Reader
|
*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 (
|
var (
|
||||||
staticFileLruCache, _ = lru.New(1000)
|
staticFileLruCache, _ = lru.New(MaxCacheFileCount)
|
||||||
lruLock sync.RWMutex
|
lruLock sync.RWMutex
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -139,8 +146,10 @@ func openFile(filePath string, fi os.FileInfo, acceptEncoding string) (bool, str
|
|||||||
return false, "", nil, nil, err
|
return false, "", nil, nil, err
|
||||||
}
|
}
|
||||||
mapFile = &serveContentHolder{data: bufferWriter.Bytes(), modTime: fi.ModTime(), size: int64(bufferWriter.Len()), originSize: fi.Size(), encoding: n}
|
mapFile = &serveContentHolder{data: bufferWriter.Bytes(), modTime: fi.ModTime(), size: int64(bufferWriter.Len()), originSize: fi.Size(), encoding: n}
|
||||||
|
if isOk(mapFile, fi) {
|
||||||
staticFileLruCache.Add(mapKey, mapFile)
|
staticFileLruCache.Add(mapKey, mapFile)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
reader := &serveContentReader{Reader: bytes.NewReader(mapFile.data)}
|
reader := &serveContentReader{Reader: bytes.NewReader(mapFile.data)}
|
||||||
return mapFile.encoding != "", mapFile.encoding, mapFile, reader, nil
|
return mapFile.encoding != "", mapFile.encoding, mapFile, reader, nil
|
||||||
@ -149,6 +158,8 @@ func openFile(filePath string, fi os.FileInfo, acceptEncoding string) (bool, str
|
|||||||
func isOk(s *serveContentHolder, fi os.FileInfo) bool {
|
func isOk(s *serveContentHolder, fi os.FileInfo) bool {
|
||||||
if s == nil {
|
if s == nil {
|
||||||
return false
|
return false
|
||||||
|
} else if s.size > int64(MaxCacheFileSize) {
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
return s.modTime == fi.ModTime() && s.originSize == fi.Size()
|
return s.modTime == fi.ModTime() && s.originSize == fi.Size()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user