feat(storage): add storage opt

This commit is contained in:
bandl 2021-10-20 21:35:56 +08:00
parent a374638758
commit fe096c9054
2 changed files with 87 additions and 2 deletions

View File

@ -1,11 +1,13 @@
package single
import (
"time"
"gitee.com/timedb/wheatCache/pkg/event"
"gitee.com/timedb/wheatCache/pkg/lru"
"gitee.com/timedb/wheatCache/pkg/proto"
"gitee.com/timedb/wheatCache/storage/dao"
"github.com/spf13/viper"
"time"
)
type serverSingle struct {
@ -16,7 +18,7 @@ type serverSingle struct {
dao *dao.Dao
}
func NewServer() *serverSingle {
func NewServer() proto.CommServerServer {
oneSingleServer.Do(func() {
timeOut := viper.GetInt("storage.timeOut")
if timeOut == 0 {

View File

@ -2,6 +2,7 @@ package single
import (
context "context"
"gitee.com/timedb/wheatCache/pkg/event"
"gitee.com/timedb/wheatCache/pkg/lru"
"gitee.com/timedb/wheatCache/pkg/proto"
@ -132,3 +133,85 @@ func (s *serverSingle) Getbit(
Val: flag.(bool),
}, nil
}
func (s *serverSingle) Getrange(
ctx context.Context,
req *proto.GetrangeRequest,
) (*proto.GetrangeResponse, error) {
work := event.EventWorkFunc(func() (interface{}, error) {
return s.dao.Getrange(req.Key, req.Start, req.End)
})
lruEvent := event.NewEvent(lru.OptionEventName)
lruEvent.InitWaitEvent()
lruEvent.SetValue(lru.WorkFuncEventKey, work)
s.lruProduce.Call(ctx, lruEvent)
flag, err := lruEvent.StartWaitEvent(s.timeOut)
if err != nil {
return nil, err
}
return &proto.GetrangeResponse{
Result: flag.(string),
}, nil
}
func (s *serverSingle) Getset(
ctx context.Context,
req *proto.GetsetRequest,
) (*proto.GetsetResponse, error) {
work := event.EventWorkFunc(func() (interface{}, error) {
return s.dao.Getset(req.Key, req.Val)
})
lruEvent := event.NewEvent(lru.OptionEventName)
lruEvent.InitWaitEvent()
lruEvent.SetValue(lru.WorkFuncEventKey, work)
s.lruProduce.Call(ctx, lruEvent)
result, err := lruEvent.StartWaitEvent(s.timeOut)
if err != nil {
return nil, err
}
return &proto.GetsetResponse{
Result: result.(string),
}, nil
}
func (s *serverSingle) Strlen(
ctx context.Context,
req *proto.StrlenRequest,
) (*proto.StrlenResponse, error) {
work := event.EventWorkFunc(func() (interface{}, error) {
return s.dao.Strlen(req.Key)
})
lruEvent := event.NewEvent(lru.OptionEventName)
lruEvent.InitWaitEvent()
lruEvent.SetValue(lru.WorkFuncEventKey, work)
s.lruProduce.Call(ctx, lruEvent)
flag, err := lruEvent.StartWaitEvent(s.timeOut)
if err != nil {
return nil, err
}
return &proto.StrlenResponse{
Length: flag.(int32),
}, nil
}
func (s *serverSingle) Setnx(
ctx context.Context,
req *proto.SetnxRequest,
) (*proto.SetnxResponse, error) {
work := event.EventWorkFunc(func() (interface{}, error) {
return nil, s.dao.Setnx(req.Key, req.Val)
})
lruEvent := event.NewEvent(lru.OptionEventName)
lruEvent.InitWaitEvent()
lruEvent.SetValue(lru.WorkFuncEventKey, work)
s.lruProduce.Call(ctx, lruEvent)
_, err := lruEvent.StartWaitEvent(s.timeOut)
if err != nil {
return nil, err
}
return &proto.SetnxResponse{}, nil
}