只有系统内存超过3GB的才缓存Hash

This commit is contained in:
GoEdgeLab
2022-08-20 12:09:15 +08:00
parent 2906fcc2a7
commit ab55b2819f

View File

@@ -3,25 +3,36 @@
package caches
import (
"github.com/TeaOSLab/EdgeNode/internal/utils"
"github.com/TeaOSLab/EdgeNode/internal/zero"
"sync"
)
// FileListHashMap
// FileListHashMap 文件Hash列表
type FileListHashMap struct {
m map[string]zero.Zero
locker sync.RWMutex
isReady bool
m map[string]zero.Zero
locker sync.RWMutex
isAvailable bool
isReady bool
}
func NewFileListHashMap() *FileListHashMap {
return &FileListHashMap{
m: map[string]zero.Zero{},
isReady: false,
m: map[string]zero.Zero{},
isAvailable: false,
isReady: false,
}
}
func (this *FileListHashMap) Load(db *FileListDB) error {
// 如果系统内存过小,我们不缓存
if utils.SystemMemoryGB() < 3 {
return nil
}
this.isAvailable = true
var lastId int64
for {
hashList, maxId, err := db.ListHashes(lastId)
@@ -42,18 +53,29 @@ func (this *FileListHashMap) Load(db *FileListDB) error {
}
func (this *FileListHashMap) Add(hash string) {
if !this.isAvailable {
return
}
this.locker.Lock()
this.m[hash] = zero.New()
this.locker.Unlock()
}
func (this *FileListHashMap) Delete(hash string) {
if !this.isAvailable {
return
}
this.locker.Lock()
delete(this.m, hash)
this.locker.Unlock()
}
func (this *FileListHashMap) Exist(hash string) bool {
if !this.isAvailable {
return true
}
if !this.isReady {
// 只有完全Ready时才能判断是否为false
return true