优化缓存相关代码

This commit is contained in:
GoEdgeLab
2022-04-14 10:25:34 +08:00
parent 0649eb0efe
commit 2b76fd4463
3 changed files with 35 additions and 2 deletions

View File

@@ -27,6 +27,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"regexp" "regexp"
"runtime"
"sort" "sort"
"strconv" "strconv"
"strings" "strings"
@@ -62,7 +63,16 @@ const (
var sharedWritingFileKeyMap = map[string]zero.Zero{} // key => bool var sharedWritingFileKeyMap = map[string]zero.Zero{} // key => bool
var sharedWritingFileKeyLocker = sync.Mutex{} var sharedWritingFileKeyLocker = sync.Mutex{}
var maxOpenFiles = 2 var maxOpenFiles = 3
func init() {
if teaconst.DiskIsFast {
maxOpenFiles = runtime.NumCPU()
}
if maxOpenFiles < 3 {
maxOpenFiles = 3
}
}
// FileStorage 文件缓存 // FileStorage 文件缓存
// 文件结构: // 文件结构:
@@ -425,7 +435,7 @@ func (this *FileStorage) openWriter(key string, expiredAt int64, status int, siz
return nil, ErrFileIsWriting return nil, ErrFileIsWriting
} }
if len(sharedWritingFileKeyMap) > maxOpenFiles { if !isFlushing && len(sharedWritingFileKeyMap) >= maxOpenFiles {
sharedWritingFileKeyLocker.Unlock() sharedWritingFileKeyLocker.Unlock()
return nil, ErrTooManyOpenFiles return nil, ErrTooManyOpenFiles
} }

View File

@@ -17,4 +17,6 @@ var (
IsQuiting = false // 是否正在退出 IsQuiting = false // 是否正在退出
EnableDBStat = false // 是否开启本地数据库统计 EnableDBStat = false // 是否开启本地数据库统计
DiskIsFast = false // 是否为高速硬盘
) )

View File

@@ -111,6 +111,9 @@ func (this *Node) Start() {
return return
} }
// 检查硬盘类型
this.checkDisk()
// 读取API配置 // 读取API配置
err = this.syncConfig(0) err = this.syncConfig(0)
if err != nil { if err != nil {
@@ -911,3 +914,21 @@ func (this *Node) onReload(config *nodeconfigs.NodeConfig) {
teaconst.GlobalProductName = config.ProductConfig.Name teaconst.GlobalProductName = config.ProductConfig.Name
} }
} }
func (this *Node) checkDisk() {
if runtime.GOOS == "linux" {
for _, path := range []string{
"/sys/block/vda/queue/rotational",
"/sys/block/sda/queue/rotational",
} {
data, err := ioutil.ReadFile(path)
if err != nil {
continue
}
if string(data) == "0" {
teaconst.DiskIsFast = true
}
break
}
}
}