forked from p93542168/wheat-cache
feat(storage-dao): add hashx
This commit is contained in:
parent
222bcc4eea
commit
fcdb2310fe
|
@ -1,39 +1,169 @@
|
||||||
package dao
|
package dao
|
||||||
|
|
||||||
import "gitee.com/wheat-os/wheatCache/pkg/proto"
|
import (
|
||||||
|
"gitee.com/wheat-os/wheatCache/pkg/errorx"
|
||||||
|
"gitee.com/wheat-os/wheatCache/pkg/proto"
|
||||||
|
"gitee.com/wheat-os/wheatCache/pkg/structure"
|
||||||
|
"gitee.com/wheat-os/wheatCache/pkg/structure/hashx"
|
||||||
|
)
|
||||||
|
|
||||||
func (d *Dao) HDel(key *proto.BaseKey, hKeys []string) (*proto.HDelResponse, error) {
|
func (d *Dao) HDel(key *proto.BaseKey, hKeys []string) (*proto.HDelResponse, error) {
|
||||||
panic("not implemented") // TODO: Implement
|
value, ok := d.lru.Get(key)
|
||||||
|
if !ok {
|
||||||
|
return nil, errorx.NotKeyErr(key.Key)
|
||||||
|
}
|
||||||
|
|
||||||
|
hashVal, ok := value.(structure.HashXInterface)
|
||||||
|
if !ok {
|
||||||
|
return nil, errorx.DaoTypeErr("hashx")
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, hK := range hKeys {
|
||||||
|
up, err := hashVal.Del(hK)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
d.lru.UpdateLruSize(up)
|
||||||
|
}
|
||||||
|
|
||||||
|
return &proto.HDelResponse{}, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Dao) HExists(_ *proto.BaseKey, _ string) (*proto.HExistsResponse, error) {
|
func (d *Dao) HExists(key *proto.BaseKey, hKeys string) (*proto.HExistsResponse, error) {
|
||||||
panic("not implemented") // TODO: Implement
|
value, ok := d.lru.Get(key)
|
||||||
|
if !ok {
|
||||||
|
return nil, errorx.NotKeyErr(key.Key)
|
||||||
|
}
|
||||||
|
|
||||||
|
hashVal, ok := value.(structure.HashXInterface)
|
||||||
|
if !ok {
|
||||||
|
return nil, errorx.DaoTypeErr("hashx")
|
||||||
|
}
|
||||||
|
_, err := hashVal.Get(hKeys)
|
||||||
|
if err != nil {
|
||||||
|
return &proto.HExistsResponse{Exists: false}, nil
|
||||||
|
}
|
||||||
|
return &proto.HExistsResponse{Exists: true}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Dao) HGet(_ *proto.BaseKey, _ []string) (*proto.HGetResponse, error) {
|
func (d *Dao) HGet(key *proto.BaseKey, hKeys []string) (*proto.HGetResponse, error) {
|
||||||
panic("not implemented") // TODO: Implement
|
value, ok := d.lru.Get(key)
|
||||||
|
if !ok {
|
||||||
|
return nil, errorx.NotKeyErr(key.Key)
|
||||||
|
}
|
||||||
|
|
||||||
|
hashVal, ok := value.(structure.HashXInterface)
|
||||||
|
if !ok {
|
||||||
|
return nil, errorx.DaoTypeErr("hashx")
|
||||||
|
}
|
||||||
|
|
||||||
|
result := make(map[string]string)
|
||||||
|
for _, hK := range hKeys {
|
||||||
|
res, err := hashVal.Get(hK)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
result[hK] = res
|
||||||
|
}
|
||||||
|
return &proto.HGetResponse{Items: result}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Dao) HGetAll(_ *proto.BaseKey) (*proto.HGetAllResponse, error) {
|
func (d *Dao) HGetAll(key *proto.BaseKey) (*proto.HGetAllResponse, error) {
|
||||||
panic("not implemented") // TODO: Implement
|
value, ok := d.lru.Get(key)
|
||||||
|
if !ok {
|
||||||
|
return nil, errorx.NotKeyErr(key.Key)
|
||||||
|
}
|
||||||
|
|
||||||
|
hashVal, ok := value.(structure.HashXInterface)
|
||||||
|
if !ok {
|
||||||
|
return nil, errorx.DaoTypeErr("hashx")
|
||||||
|
}
|
||||||
|
return &proto.HGetAllResponse{Items: hashVal.Item()}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Dao) HIncrBy(_ *proto.BaseKey, _ []string) (*proto.HIncrByResponse, error) {
|
func (d *Dao) HIncrBy(key *proto.BaseKey, hKeys []string, renewal int32) (*proto.HIncrByResponse, error) {
|
||||||
panic("not implemented") // TODO: Implement
|
value, ok := d.lru.Get(key)
|
||||||
|
if !ok {
|
||||||
|
return nil, errorx.NotKeyErr(key.Key)
|
||||||
|
}
|
||||||
|
|
||||||
|
hashVal, ok := value.(structure.HashXInterface)
|
||||||
|
if !ok {
|
||||||
|
return nil, errorx.DaoTypeErr("hashx")
|
||||||
|
}
|
||||||
|
count, result, err := hashVal.Add(int(renewal), hKeys...)
|
||||||
|
return &proto.HIncrByResponse{
|
||||||
|
Count: int32(count),
|
||||||
|
Values: result,
|
||||||
|
}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Dao) HKeys(_ *proto.BaseKey) (*proto.HKeysResponse, error) {
|
func (d *Dao) HKeys(key *proto.BaseKey) (*proto.HKeysResponse, error) {
|
||||||
panic("not implemented") // TODO: Implement
|
value, ok := d.lru.Get(key)
|
||||||
|
if !ok {
|
||||||
|
return nil, errorx.NotKeyErr(key.Key)
|
||||||
|
}
|
||||||
|
|
||||||
|
hashVal, ok := value.(structure.HashXInterface)
|
||||||
|
if !ok {
|
||||||
|
return nil, errorx.DaoTypeErr("hashx")
|
||||||
|
}
|
||||||
|
|
||||||
|
return &proto.HKeysResponse{Keys: hashVal.Key()}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Dao) HLen(_ *proto.BaseKey) (*proto.HLenResponse, error) {
|
func (d *Dao) HLen(key *proto.BaseKey) (*proto.HLenResponse, error) {
|
||||||
panic("not implemented") // TODO: Implement
|
value, ok := d.lru.Get(key)
|
||||||
|
if !ok {
|
||||||
|
return nil, errorx.NotKeyErr(key.Key)
|
||||||
|
}
|
||||||
|
|
||||||
|
hashVal, ok := value.(structure.HashXInterface)
|
||||||
|
if !ok {
|
||||||
|
return nil, errorx.DaoTypeErr("hashx")
|
||||||
|
}
|
||||||
|
|
||||||
|
return &proto.HLenResponse{Length: int32(hashVal.Length())}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Dao) HSet(_ *proto.BaseKey, _ map[string]string) (*proto.HSetResponse, error) {
|
func (d *Dao) HSet(key *proto.BaseKey, set map[string]string) (*proto.HSetResponse, error) {
|
||||||
panic("not implemented") // TODO: Implement
|
value, ok := d.lru.Get(key)
|
||||||
|
if !ok {
|
||||||
|
hashVal := hashx.NewHashXSingle()
|
||||||
|
for k, v := range set {
|
||||||
|
hashVal.Set(k, v)
|
||||||
|
}
|
||||||
|
err := d.lru.Add(key, hashVal)
|
||||||
|
return &proto.HSetResponse{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
hashVal, ok := value.(structure.HashXInterface)
|
||||||
|
if !ok {
|
||||||
|
return nil, errorx.DaoTypeErr("hashx")
|
||||||
|
}
|
||||||
|
for k, v := range set {
|
||||||
|
upLength := hashVal.Set(k, v)
|
||||||
|
d.lru.UpdateLruSize(upLength)
|
||||||
|
}
|
||||||
|
|
||||||
|
return &proto.HSetResponse{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Dao) HSetX(_ *proto.BaseKey, _ map[string]string) (*proto.HSetXResponse, error) {
|
func (d *Dao) HSetX(key *proto.BaseKey, set map[string]string) (*proto.HSetXResponse, error) {
|
||||||
panic("not implemented") // TODO: Implement
|
value, ok := d.lru.Get(key)
|
||||||
|
if !ok {
|
||||||
|
return &proto.HSetXResponse{}, errorx.NotKeyErr(key.Key)
|
||||||
|
}
|
||||||
|
|
||||||
|
hashVal, ok := value.(structure.HashXInterface)
|
||||||
|
if !ok {
|
||||||
|
return nil, errorx.DaoTypeErr("hashx")
|
||||||
|
}
|
||||||
|
for k, v := range set {
|
||||||
|
upLength := hashVal.Set(k, v)
|
||||||
|
d.lru.UpdateLruSize(upLength)
|
||||||
|
}
|
||||||
|
|
||||||
|
return &proto.HSetXResponse{}, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue