diff --git a/pkg/errorx/lru.go b/pkg/errorx/lru.go index 569e563..95952eb 100644 --- a/pkg/errorx/lru.go +++ b/pkg/errorx/lru.go @@ -3,3 +3,7 @@ package errorx func LruNotWorkFuncEventErr() error { return New("the event haven't work of function") } + +func KeyBaseIsNilErr() error { + return New("key base not is nil") +} diff --git a/pkg/lru/define.go b/pkg/lru/define.go index 6c8ede4..c5cedb2 100644 --- a/pkg/lru/define.go +++ b/pkg/lru/define.go @@ -33,7 +33,7 @@ const ( type CacheInterface interface { Del() error Get(key *proto.BaseKey) (structure.KeyBaseInterface, bool) - Add(key *proto.BaseKey, val structure.KeyBaseInterface) + Add(key *proto.BaseKey, val structure.KeyBaseInterface) error UpdateLruSize(length structure.UpdateLength) DelByKey(key *proto.BaseKey) error DelToClearSize() error diff --git a/pkg/lru/lru.go b/pkg/lru/lru.go index a8682ad..cb5c9b0 100644 --- a/pkg/lru/lru.go +++ b/pkg/lru/lru.go @@ -108,7 +108,11 @@ func (lru *SingleCache) GetDriver() event.DriverInterface { } //Add 增加 -func (lru *SingleCache) Add(key *proto.BaseKey, val structure.KeyBaseInterface) { +func (lru *SingleCache) Add(key *proto.BaseKey, val structure.KeyBaseInterface) error { + + if key == nil { + return errorx.KeyBaseIsNilErr() + } exp := lru.lruTtlManage.setKeys(key) keyBaseVal := &keyBaseValue{ @@ -119,17 +123,22 @@ func (lru *SingleCache) Add(key *proto.BaseKey, val structure.KeyBaseInterface) if elVal, ok := lru.lruMap[key.Key]; ok { lru.li.MoveToFront(elVal) elVal.Value = keyBaseVal - return + return nil } valEl := lru.li.PushFront(keyBaseVal) lru.lruMap[key.Key] = valEl //增加大小 lru.UpdateLruSize(structure.UpdateLength(valEl.Value.(*keyBaseValue).val.SizeByte())) + return nil } // Get 查找key对应的value func (lru *SingleCache) Get(key *proto.BaseKey) (structure.KeyBaseInterface, bool) { + if key == nil { + return nil, false + } + if elVal, ok := lru.lruMap[key.Key]; ok { lru.li.MoveToFront(elVal) return elVal.Value.(*keyBaseValue).val, true @@ -152,6 +161,11 @@ func (lru *SingleCache) Del() error { //DelByKey 根据key删除 func (lru *SingleCache) DelByKey(key *proto.BaseKey) error { + + if key == nil { + return errorx.KeyBaseIsNilErr() + } + if lru.lruMap == nil { return errorx.New("lru is nil") } @@ -194,6 +208,10 @@ func (lru *SingleCache) DelToClearSize() error { // 更新过期时间 func (lru *SingleCache) UpdateTTl(key *proto.BaseKey) error { + if key == nil { + return errorx.KeyBaseIsNilErr() + } + if elVal, ok := lru.lruMap[key.Key]; ok { expire := lru.lruTtlManage.setKeys(key) elVal.Value.(*keyBaseValue).expire = expire