From 7e225ff9977dc2b75f0b490aa0379b776f2f4ef0 Mon Sep 17 00:00:00 2001 From: "pzrr@qq.com" Date: Fri, 11 May 2018 17:01:56 +0800 Subject: [PATCH 1/3] add docs/guide.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4f9f63c..48559fc 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Important: Now need go1.9+ version support. Document: https://www.kancloud.cn/devfeel/dotweb/346608 -CookBook: https://www.kancloud.cn/devfeel/dotweb/439314 +Guide: https://github.com/devfeel/dotweb/blob/master/docs/GUIDE.md [![Gitter](https://badges.gitter.im/devfeel/dotweb.svg)](https://gitter.im/devfeel-dotweb/wechat) [![GoDoc](https://godoc.org/github.com/devfeel/dotweb?status.svg)](https://godoc.org/github.com/devfeel/dotweb) From d3e0f70095ccae7c7cc6b2d599fcac4414ba19a6 Mon Sep 17 00:00:00 2001 From: "pzrr@qq.com" Date: Wed, 23 May 2018 14:18:42 +0800 Subject: [PATCH 2/3] =?UTF-8?q?####=20Version=201.4.9.5=20*=20framewrok.Re?= =?UTF-8?q?disClient=E5=A2=9E=E5=8A=A0Ping=E6=8E=A5=E5=8F=A3=EF=BC=8C?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E6=A3=80=E6=9F=A5=E6=9C=8D=E5=8A=A1=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=8F=AF=E7=94=A8=20*=20GetSessionStore=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0Redis=20ServerUrl=E7=9A=84ping=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=EF=BC=8C=E8=8B=A5=E4=B8=8D=E5=8F=AF=E7=94=A8=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?panic=E5=BC=82=E5=B8=B8=E4=BF=A1=E6=81=AF=20*=202018-05-23=2013?= =?UTF-8?q?:30?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/main.go | 4 ++-- framework/redis/redisutil.go | 8 ++++++++ framework/redis/redisutil_test.go | 16 ++++++++++++++++ session/session.go | 9 +++++++-- session/store_redis.go | 7 +++++-- version.MD | 4 ++++ 6 files changed, 42 insertions(+), 6 deletions(-) diff --git a/example/main.go b/example/main.go index 0862b40..24138ed 100644 --- a/example/main.go +++ b/example/main.go @@ -5,10 +5,10 @@ import ( "fmt" "github.com/devfeel/dotweb" "github.com/devfeel/dotweb/framework/exception" - "github.com/devfeel/dotweb/session" "net/http" "strconv" "time" + "github.com/devfeel/dotweb/session" ) func main() { @@ -46,7 +46,7 @@ func main() { //runtime mode app.HttpServer.SetSessionConfig(session.NewDefaultRuntimeConfig()) //redis mode - //app.HttpServer.SetSessionConfig(session.NewDefaultRedisConfig("192.168.8.175:6379", "")) + //app.HttpServer.SetSessionConfig(session.NewDefaultRedisConfig("redis://192.168.8.175:6379/0")) app.HttpServer.SetEnabledDetailRequestData(true) diff --git a/framework/redis/redisutil.go b/framework/redis/redisutil.go index 9ba5d3e..4374aa3 100644 --- a/framework/redis/redisutil.go +++ b/framework/redis/redisutil.go @@ -516,6 +516,14 @@ func (rc *RedisClient) SUnionStore(destination string, key ...interface{})(int, //****************** 全局操作 *********************** +// Ping +func (rc *RedisClient) Ping()(string,error){ + conn := rc.pool.Get() + defer conn.Close() + val, err:=redis.String(conn.Do("PING")) + return val, err +} + // DBSize 返回当前数据库的 key 的数量 func (rc *RedisClient) DBSize()(int64, error){ conn := rc.pool.Get() diff --git a/framework/redis/redisutil_test.go b/framework/redis/redisutil_test.go index b8ac1e5..17ae75b 100644 --- a/framework/redis/redisutil_test.go +++ b/framework/redis/redisutil_test.go @@ -1 +1,17 @@ package redisutil + +import ( + "testing" +) + +const redisServerUrl = "redis://192.168.8.175:6379/0" + +func TestRedisClient_Ping(t *testing.T) { + redisClient := GetRedisClient(redisServerUrl) + val, err := redisClient.Ping() + if err != nil{ + t.Error(err) + }else{ + t.Log(val) + } +} \ No newline at end of file diff --git a/session/session.go b/session/session.go index 2c7ae74..3be600c 100644 --- a/session/session.go +++ b/session/session.go @@ -7,6 +7,7 @@ import ( "net/url" "strconv" "time" + "fmt" ) const ( @@ -51,12 +52,16 @@ func GetSessionStore(config *StoreConfig) SessionStore { case SessionMode_Runtime: return NewRuntimeStore(config) case SessionMode_Redis: - return NewRedisStore(config) + store, err := NewRedisStore(config) + if err != nil{ + panic(fmt.Sprintf("redis session [%v] ping error -> %v", config.StoreName, err.Error())) + }else{ + return store + } default: panic("not support session store -> " + config.StoreName) } return nil - } //create new store with default config and use runtime store diff --git a/session/store_redis.go b/session/store_redis.go index 9b53fa2..bf02f57 100644 --- a/session/store_redis.go +++ b/session/store_redis.go @@ -23,12 +23,15 @@ func getRedisKey(key string) string { } //create new redis store -func NewRedisStore(config *StoreConfig) *RedisStore { - return &RedisStore{ +func NewRedisStore(config *StoreConfig) (*RedisStore, error){ + store := &RedisStore{ lock: new(sync.RWMutex), serverIp: config.ServerIP, maxlifetime: config.Maxlifetime, } + redisClient := redisutil.GetRedisClient(store.serverIp) + _, err:=redisClient.Ping() + return store, err } // SessionRead get session state by sessionId diff --git a/version.MD b/version.MD index 324e107..4233894 100644 --- a/version.MD +++ b/version.MD @@ -1,5 +1,9 @@ ## dotweb版本记录: +#### Version 1.4.9.5 +* framewrok.RedisClient增加Ping接口,用于检查服务是否可用 +* GetSessionStore增加Redis ServerUrl的ping检查,若不可用直接panic异常信息 +* 2018-05-23 13:30 #### Version 1.4.9.4 * 调整: dotweb.Classic移除自动UseRequestLog逻辑 From 9e74bf03a6a6a8ae6e7754514779fdad2ab0fe04 Mon Sep 17 00:00:00 2001 From: "pzrr@qq.com" Date: Wed, 23 May 2018 14:31:15 +0800 Subject: [PATCH 3/3] =?UTF-8?q?####=20Version=201.4.9.5=20*=20framewrok.Re?= =?UTF-8?q?disClient=E5=A2=9E=E5=8A=A0Ping=E6=8E=A5=E5=8F=A3=EF=BC=8C?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E6=A3=80=E6=9F=A5=E6=9C=8D=E5=8A=A1=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=8F=AF=E7=94=A8=20*=20GetSessionStore=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0Redis=20ServerUrl=E7=9A=84ping=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=EF=BC=8C=E8=8B=A5=E4=B8=8D=E5=8F=AF=E7=94=A8=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?panic=E5=BC=82=E5=B8=B8=E4=BF=A1=E6=81=AF=20*=202018-05-23=2013?= =?UTF-8?q?:30?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- framework/redis/redisutil.go | 2 +- framework/redis/redisutil_test.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/redis/redisutil.go b/framework/redis/redisutil.go index 4374aa3..e81cab2 100644 --- a/framework/redis/redisutil.go +++ b/framework/redis/redisutil.go @@ -516,7 +516,7 @@ func (rc *RedisClient) SUnionStore(destination string, key ...interface{})(int, //****************** 全局操作 *********************** -// Ping +// Ping 测试一个连接是否可用 func (rc *RedisClient) Ping()(string,error){ conn := rc.pool.Get() defer conn.Close() diff --git a/framework/redis/redisutil_test.go b/framework/redis/redisutil_test.go index 17ae75b..3b71963 100644 --- a/framework/redis/redisutil_test.go +++ b/framework/redis/redisutil_test.go @@ -4,10 +4,10 @@ import ( "testing" ) -const redisServerUrl = "redis://192.168.8.175:6379/0" +const redisServerURL = "redis://192.168.8.175:6379/0" func TestRedisClient_Ping(t *testing.T) { - redisClient := GetRedisClient(redisServerUrl) + redisClient := GetRedisClient(redisServerURL) val, err := redisClient.Ping() if err != nil{ t.Error(err)