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 {