45 lines
1.0 KiB
Go
45 lines
1.0 KiB
Go
package lru
|
|
|
|
import (
|
|
"context"
|
|
"gitee.com/timedb/wheatCache/pkg/errorx"
|
|
"gitee.com/timedb/wheatCache/pkg/event"
|
|
)
|
|
|
|
func (lru *SingleCache) lruSingleWork() interface{} {
|
|
ctx := context.Background()
|
|
for {
|
|
workEvent := lru.lruConsumer.Receive(ctx)
|
|
|
|
switch workEvent.GetEventName() {
|
|
case OptionEventName:
|
|
workFunc, ok := workEvent.GetValue(WorkFuncEventKey)
|
|
if !ok {
|
|
workEvent.SetResultErr(errorx.LruNotWorkFuncEventErr())
|
|
continue
|
|
}
|
|
|
|
if work, ok := workFunc.(event.EventWorkFunc); ok {
|
|
workEvent.ExecWorkAndSendResult(work)
|
|
}
|
|
case CleanEventName:
|
|
workFunc, ok := workEvent.GetValue(WorkFuncEventKey)
|
|
if !ok {
|
|
workEvent.SetResultErr(errorx.LruNotWorkFuncEventErr())
|
|
continue
|
|
}
|
|
// 对当前的io数量进行判断
|
|
ioNum := lru.GetDriver().GetLength()
|
|
if ioNum > lru.lruMaxDiverSize*1/2 {
|
|
lru.lruCleanProduce.Call(ctx, workEvent)
|
|
continue
|
|
}
|
|
if work, ok := workFunc.(event.EventWorkFunc); ok {
|
|
workEvent.ExecWorkAndSendResult(work)
|
|
}
|
|
default:
|
|
return errorx.New("no this name")
|
|
}
|
|
}
|
|
}
|