From 2dabef2682a05808ac25874494f4ad047ba1b0a2 Mon Sep 17 00:00:00 2001 From: comin2013 <350878418@qq.com> Date: Thu, 22 Apr 2021 18:32:30 +0800 Subject: [PATCH 1/3] Signed-off-by: waze <87033883@qq.com> Signed-off-by: comin2013 <350878418@qq.com> --- sysmodule/redismodule/redismodule.go | 36 ++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/sysmodule/redismodule/redismodule.go b/sysmodule/redismodule/redismodule.go index cf1b848..a6190f1 100644 --- a/sysmodule/redismodule/redismodule.go +++ b/sysmodule/redismodule/redismodule.go @@ -125,6 +125,42 @@ func (m *RedisModule) TestPingRedis() error { return nil } +func (m *RedisModule) HSetStruct(key string, val interface{}) error { + conn, err := m.getConn() + if err != nil { + return err + } + defer conn.Close() + + + _, err = conn.Do("HSET", redis.Args{}.Add(key).AddFlat(val)...) + if err != nil { + return err + } + return nil +} + +func (m *RedisModule) HGetStruct(key string, out_val interface{}) error { + conn, err := m.getConn() + if err != nil { + return err + } + defer conn.Close() + + v, err := redis.Values(conn.Do("HGETALL", key)) + if err != nil { + return err + } + err = redis.ScanStruct(v, out_val) + if err != nil { + return err + } + + return nil +} + + + func (m *RedisModule) SetString(key, value interface{}) (err error) { err = m.setStringByExpire(key, value, "-1") From 350bffda8f60c7d3bf1ca755964e03320a1e8cf7 Mon Sep 17 00:00:00 2001 From: comin2013 <350878418@qq.com> Date: Thu, 22 Apr 2021 18:38:05 +0800 Subject: [PATCH 2/3] Update redismodule.go MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit redismodule 添加 struct 2 hash --- sysmodule/redismodule/redismodule.go | 33 ++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/sysmodule/redismodule/redismodule.go b/sysmodule/redismodule/redismodule.go index cf1b848..2dc3909 100644 --- a/sysmodule/redismodule/redismodule.go +++ b/sysmodule/redismodule/redismodule.go @@ -185,6 +185,39 @@ func (m *RedisModule) setStringByExpire(key, value, expire interface{}) error { return nil } +func (m *RedisModule) HSetStruct(key string, val interface{}) error { + conn, err := m.getConn() + if err != nil { + return err + } + defer conn.Close() + + + _, err = conn.Do("HSET", redis.Args{}.Add(key).AddFlat(val)...) + if err != nil { + return err + } + return nil +} + +func (m *RedisModule) HGetStruct(key string, out_val interface{}) error { + conn, err := m.getConn() + if err != nil { + return err + } + defer conn.Close() + + v, err := redis.Values(conn.Do("HGETALL", key)) + if err != nil { + return err + } + err = redis.ScanStruct(v, out_val) + if err != nil { + return err + } + + return nil +} func (m *RedisModule) SetStringMap(mapInfo map[interface{}]interface{}) (err error) { err = m.setMuchStringByExpire(mapInfo, "-1") return From 23e8dacdeb20bc0053d59e529ec320de96807055 Mon Sep 17 00:00:00 2001 From: comin2013 <350878418@qq.com> Date: Thu, 22 Apr 2021 18:53:36 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0struct=202=20hash=20?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sysmodule/redismodule/redismodule_test.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/sysmodule/redismodule/redismodule_test.go b/sysmodule/redismodule/redismodule_test.go index 8676f29..fcea7b2 100644 --- a/sysmodule/redismodule/redismodule_test.go +++ b/sysmodule/redismodule/redismodule_test.go @@ -24,13 +24,29 @@ func Test_Example(t *testing.T) { module.SetString(1000,2*1000) module.SetStringExpire("key2","value2","60") - //支持直接存储struct数据 + //支持直接存储struct数据(json string) jsonData := struct{ A string B string }{"Aaaa","Bbbb"} module.SetStringJSON("key3",&jsonData) + // struct 2 redis hash + a := struct{ + A string `redis:"a"` + B int `redis:"b"` + }{ + "ccc", + 1, + } + module.HSetStruct("skey", &a) + a.A = "xx" + module.HGetStruct("skey", &a) + if a.A == "xx"{ + fmt.Println("struct 2 hash failed.") + } + + //支持存储map数据结构,map中的key与value与redis的key,value对象 mapData := map[interface{}]interface{}{} mapData["key4"] = "value4"