feat(lru): fix lru function and memory function

This commit is contained in:
HuangJiaLuo 2021-10-03 16:22:33 +08:00
parent 47a49b1fdb
commit 96d5a9acc9
3 changed files with 27 additions and 15 deletions

View File

@ -33,13 +33,17 @@ func (lru *singleCache) UpdateLruLength(length int64) {
atomic.AddInt64(&lru.nowSize, length)
}
// NewLRUCache lru初始化
func NewLRUCache() *singleCache {
func cacheInit() (string, string, event.DriverInterface) {
maxSize := viper.GetString("lruCache.maxSize")
clearSize := viper.GetString("lruCache.clearSize")
maxDriver := viper.GetInt("lruCache.eventDriverSize")
lruDriver := event.NewDriver(maxDriver)
return maxSize, clearSize, lruDriver
}
// NewLRUCache lru初始化
func NewLRUCache() *singleCache {
maxSize, clearSize, lruDriver := cacheInit()
return &singleCache{
maxsize: util.ParseSizeToBit(maxSize),
clearSize: util.ParseSizeToBit(clearSize),

View File

@ -7,23 +7,23 @@ import (
)
// ParseSizeToBit
// 支持MB, GB, KB, 格式 "5KB" 或者 "5kb"
// 支持MB, GB, KB, 格式 "5KB" 或者 "5kb"等等
func ParseSizeToBit(size string) int64 {
sizes := regexp.MustCompile("^\\d+")
sizeRes := sizes.FindAllString(size, 1)
unit := strings.Split(size, sizeRes[0])
if unit[1] == "KB"|| unit[1] == "kb"{
Res, _ := strconv.ParseInt(sizeRes[0], 10, 64)
return Res * 1024
} else if unit[1] == "MB"|| unit[1] == "mb"{
Res, _ := strconv.ParseInt(sizeRes[0], 10, 64)
return Res * 1024 * 1024
} else if unit[1] == "GB"|| unit[1] == "fb"{
Res, _ := strconv.ParseInt(sizeRes[0], 10, 64)
return Res * 1024 *1024 * 1024
Res, _ := strconv.ParseInt(sizeRes[0], 10, 64)
if strings.ToUpper(unit[1]) == "BIT" || strings.ToUpper(unit[1]) == "B"{
return Res * 8
}else if strings.ToUpper(unit[1]) == "KB"{
return Res * 1024 * 8
} else if strings.ToUpper(unit[1])=="MB"{
return Res * 1024 * 1024 * 8
} else if strings.ToUpper(unit[1]) == "GB"{
return Res * 1024 *1024 * 1024 * 8
}
return 0
return -1
}

View File

@ -1,10 +1,18 @@
package util
import (
"fmt"
"github.com/stretchr/testify/require"
"testing"
)
func TestParseSizeToBit(t *testing.T) {
fmt.Print(ParseSizeToBit("18KB"))
require.Equal(t, ParseSizeToBit("18Kb"), int64(18*1024*8))
require.Equal(t, ParseSizeToBit("18KB"), int64(18*1024*8))
require.Equal(t, ParseSizeToBit("18mB"), int64(18*1024*1024*8))
require.Equal(t, ParseSizeToBit("18gb"), int64(18*1024*1024*1024*8))
require.Equal(t, ParseSizeToBit("18b"), int64(18*8))
require.Equal(t, ParseSizeToBit("18B"), int64(18*8))
require.Equal(t, ParseSizeToBit("18bit"), int64(18*8))
require.Equal(t, ParseSizeToBit("18BIt"), int64(18*8))
}