From 2a4c3d97ea32ca9c67767d6afc59df0c6176c938 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Thu, 16 Jun 2022 15:55:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dredis=20hash=E5=BA=8F?= =?UTF-8?q?=E5=88=97=E5=8C=96=20=E5=AD=97=E6=AE=B5=E5=90=8D=E6=8E=A5?= =?UTF-8?q?=E6=94=B6tag=20json=20=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lego/sys/redis/cluster/hash.go | 11 +++++++---- lego/sys/redis/sys_test.go | 24 ++++++++++++++---------- lego/utils/codec/encoder.go | 8 +++++++- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/lego/sys/redis/cluster/hash.go b/lego/sys/redis/cluster/hash.go index 6654b2a01..e6047b668 100644 --- a/lego/sys/redis/cluster/hash.go +++ b/lego/sys/redis/cluster/hash.go @@ -1,6 +1,7 @@ package cluster import ( + "go_dreamfactory/lego/utils/codec" "reflect" "github.com/go-redis/redis/v8" @@ -52,10 +53,12 @@ func (this *Redis) HMSet(key string, v interface{}) (err error) { /* Redis Hget 命令用于返回哈希表中指定字段的值 */ -func (this *Redis) HGet(key string, field string, value interface{}) (err error) { - var resultvalue string - if resultvalue = this.client.Do(this.getContext(), "HSET", key, field).String(); resultvalue != string(redis.Nil) { - err = this.decode.Decoder([]byte(resultvalue), value) +func (this *Redis) HGet(key string, field string, v interface{}) (err error) { + cmd := redis.NewStringCmd(this.getContext(), "HGET", key, field) + this.client.Process(this.getContext(), cmd) + var _result string + if _result, err = cmd.Result(); err == nil { + err = this.decode.Decoder(codec.StringToBytes(_result), v) } return } diff --git a/lego/sys/redis/sys_test.go b/lego/sys/redis/sys_test.go index ec67d05f5..580cb9277 100644 --- a/lego/sys/redis/sys_test.go +++ b/lego/sys/redis/sys_test.go @@ -160,8 +160,8 @@ func Test_Redis_Type(t *testing.T) { } type TestData struct { - Name string - Agr int + Name string `json:"name"` + Agr int `json:"agr"` } func Test_Redis_Encoder_Struct(t *testing.T) { @@ -177,16 +177,20 @@ func Test_Redis_Encoder_int(t *testing.T) { } func Test_Redis_Encoder_Hash(t *testing.T) { - // err := redis.HMSet("test:1003", &TestData{Name: "liwei1dao", Agr: 12}) - // fmt.Printf("err:%v\n", err) + err := redis.HMSet("test:1003", &TestData{Name: "liwei1dao", Agr: 12}) + fmt.Printf("err:%v\n", err) // data := &TestData{} // err = redis.HGetAll("test:1003", data) // fmt.Printf("data:%v err:%v\n", data, err) - data1 := map[string]*TestData{"li_1": {Name: "liwei2dao", Agr: 56}, "li_2": {Name: "liwei3dao", Agr: 78}} - err := redis.HMSet("test:1004", data1) - fmt.Printf("err:%v\n", err) - data2 := make(map[string]*TestData) - err = redis.HGetAll("test:1004", data2) - fmt.Printf("data2:%v err:%v\n", data2, err) + // name := "" + // err := redis.HGet("test:1003", "Name", &name) + // fmt.Printf("name:%v err:%v", name, err) + + // data1 := map[string]*TestData{"li_1": {Name: "liwei2dao", Agr: 56}, "li_2": {Name: "liwei3dao", Agr: 78}} + // err := redis.HMSet("test:1004", data1) + // fmt.Printf("err:%v\n", err) + // data2 := make(map[string]*TestData) + // err = redis.HGetAll("test:1004", data2) + // fmt.Printf("data2:%v err:%v\n", data2, err) } diff --git a/lego/utils/codec/encoder.go b/lego/utils/codec/encoder.go index 8de86a4a0..ad2096d4c 100644 --- a/lego/utils/codec/encoder.go +++ b/lego/utils/codec/encoder.go @@ -98,12 +98,18 @@ func (this *Encoder) EncoderToMap(v interface{}) (data map[string][]byte, err er elem := vof.Elem() relType := elem.Type() for i := 0; i < relType.NumField(); i++ { + fieldInfo := relType.Field(i) + tag := fieldInfo.Tag + name := tag.Get("json") + if len(name) == 0 { + name = fieldInfo.Name + } field := elem.Field(i).Interface() var valuedata []byte if valuedata, err = this.Encoder(field); err != nil { return nil, fmt.Errorf("Encoder: EncoderToMap(invalid type %T) err:%v", field, err) } - data[relType.Field(i).Name] = valuedata + data[name] = valuedata } return } else {