From fe096c90548df7774bb2e5683f5070ccf9904d44 Mon Sep 17 00:00:00 2001 From: bandl <1658002533@qq.com> Date: Wed, 20 Oct 2021 21:35:56 +0800 Subject: [PATCH] feat(storage): add storage opt --- storage/server/single/single.go | 6 ++- storage/server/single/stringx.go | 83 ++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 2 deletions(-) diff --git a/storage/server/single/single.go b/storage/server/single/single.go index 8d1e4de..0ebc17d 100644 --- a/storage/server/single/single.go +++ b/storage/server/single/single.go @@ -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 { diff --git a/storage/server/single/stringx.go b/storage/server/single/stringx.go index 825ba77..59cb73a 100644 --- a/storage/server/single/stringx.go +++ b/storage/server/single/stringx.go @@ -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 +}