diff --git a/cmd/serverNameExample_grpcExample/initial/initApp.go b/cmd/serverNameExample_grpcExample/initial/initApp.go
index 4a9faa38..cd4f35e0 100644
--- a/cmd/serverNameExample_grpcExample/initial/initApp.go
+++ b/cmd/serverNameExample_grpcExample/initial/initApp.go
@@ -51,14 +51,6 @@ func InitApp() {
logger.Debug(config.Show())
logger.Info("[logger] was initialized")
- // initializing database
- model.InitDB()
- logger.Infof("[%s] was initialized", cfg.Database.Driver)
- model.InitCache(cfg.App.CacheType)
- if cfg.App.CacheType != "" {
- logger.Infof("[%s] was initialized", cfg.App.CacheType)
- }
-
// initializing tracing
if cfg.App.EnableTrace {
tracer.InitWithConfig(
@@ -80,6 +72,14 @@ func InitApp() {
)
logger.Info("[resource statistics] was initialized")
}
+
+ // initializing database
+ model.InitDB()
+ logger.Infof("[%s] was initialized", cfg.Database.Driver)
+ model.InitCache(cfg.App.CacheType)
+ if cfg.App.CacheType != "" {
+ logger.Infof("[%s] was initialized", cfg.App.CacheType)
+ }
}
func initConfig() {
diff --git a/cmd/serverNameExample_grpcGwPbExample/initial/initApp.go b/cmd/serverNameExample_grpcGwPbExample/initial/initApp.go
index 71a3cb52..c4652cfc 100644
--- a/cmd/serverNameExample_grpcGwPbExample/initial/initApp.go
+++ b/cmd/serverNameExample_grpcGwPbExample/initial/initApp.go
@@ -64,10 +64,6 @@ func InitApp() {
logger.Info("[tracer] was initialized")
}
- // initializing the rpc server connection
- // example:
- //rpcclient.NewServerNameExampleRPCConn()
-
// initializing the print system and process resources
if cfg.App.EnableStat {
stat.Init(
@@ -76,6 +72,10 @@ func InitApp() {
)
logger.Info("[resource statistics] was initialized")
}
+
+ // initializing the rpc server connection
+ // example:
+ //rpcclient.NewServerNameExampleRPCConn()
}
func initConfig() {
diff --git a/cmd/serverNameExample_grpcHttpPbExample/initial/initApp.go b/cmd/serverNameExample_grpcHttpPbExample/initial/initApp.go
index e633eaf4..c8bafd5e 100644
--- a/cmd/serverNameExample_grpcHttpPbExample/initial/initApp.go
+++ b/cmd/serverNameExample_grpcHttpPbExample/initial/initApp.go
@@ -51,14 +51,6 @@ func InitApp() {
logger.Debug(config.Show())
logger.Info("[logger] was initialized")
- // initializing database
- //model.InitDB()
- //logger.Infof("[%s] was initialized", cfg.Database.Driver)
- //model.InitCache(cfg.App.CacheType)
- //if cfg.App.CacheType != "" {
- // logger.Infof("[%s] was initialized", cfg.App.CacheType)
- //}
-
// initializing tracing
if cfg.App.EnableTrace {
tracer.InitWithConfig(
@@ -80,6 +72,14 @@ func InitApp() {
)
logger.Info("[resource statistics] was initialized")
}
+
+ // initializing database
+ //model.InitDB()
+ //logger.Infof("[%s] was initialized", cfg.Database.Driver)
+ //model.InitCache(cfg.App.CacheType)
+ //if cfg.App.CacheType != "" {
+ // logger.Infof("[%s] was initialized", cfg.App.CacheType)
+ //}
}
func initConfig() {
diff --git a/cmd/serverNameExample_grpcPbExample/initial/initApp.go b/cmd/serverNameExample_grpcPbExample/initial/initApp.go
index e633eaf4..c8bafd5e 100644
--- a/cmd/serverNameExample_grpcPbExample/initial/initApp.go
+++ b/cmd/serverNameExample_grpcPbExample/initial/initApp.go
@@ -51,14 +51,6 @@ func InitApp() {
logger.Debug(config.Show())
logger.Info("[logger] was initialized")
- // initializing database
- //model.InitDB()
- //logger.Infof("[%s] was initialized", cfg.Database.Driver)
- //model.InitCache(cfg.App.CacheType)
- //if cfg.App.CacheType != "" {
- // logger.Infof("[%s] was initialized", cfg.App.CacheType)
- //}
-
// initializing tracing
if cfg.App.EnableTrace {
tracer.InitWithConfig(
@@ -80,6 +72,14 @@ func InitApp() {
)
logger.Info("[resource statistics] was initialized")
}
+
+ // initializing database
+ //model.InitDB()
+ //logger.Infof("[%s] was initialized", cfg.Database.Driver)
+ //model.InitCache(cfg.App.CacheType)
+ //if cfg.App.CacheType != "" {
+ // logger.Infof("[%s] was initialized", cfg.App.CacheType)
+ //}
}
func initConfig() {
diff --git a/cmd/serverNameExample_httpExample/initial/initApp.go b/cmd/serverNameExample_httpExample/initial/initApp.go
index 4a9faa38..cd4f35e0 100644
--- a/cmd/serverNameExample_httpExample/initial/initApp.go
+++ b/cmd/serverNameExample_httpExample/initial/initApp.go
@@ -51,14 +51,6 @@ func InitApp() {
logger.Debug(config.Show())
logger.Info("[logger] was initialized")
- // initializing database
- model.InitDB()
- logger.Infof("[%s] was initialized", cfg.Database.Driver)
- model.InitCache(cfg.App.CacheType)
- if cfg.App.CacheType != "" {
- logger.Infof("[%s] was initialized", cfg.App.CacheType)
- }
-
// initializing tracing
if cfg.App.EnableTrace {
tracer.InitWithConfig(
@@ -80,6 +72,14 @@ func InitApp() {
)
logger.Info("[resource statistics] was initialized")
}
+
+ // initializing database
+ model.InitDB()
+ logger.Infof("[%s] was initialized", cfg.Database.Driver)
+ model.InitCache(cfg.App.CacheType)
+ if cfg.App.CacheType != "" {
+ logger.Infof("[%s] was initialized", cfg.App.CacheType)
+ }
}
func initConfig() {
diff --git a/cmd/serverNameExample_httpPbExample/initial/initApp.go b/cmd/serverNameExample_httpPbExample/initial/initApp.go
index e633eaf4..c8bafd5e 100644
--- a/cmd/serverNameExample_httpPbExample/initial/initApp.go
+++ b/cmd/serverNameExample_httpPbExample/initial/initApp.go
@@ -51,14 +51,6 @@ func InitApp() {
logger.Debug(config.Show())
logger.Info("[logger] was initialized")
- // initializing database
- //model.InitDB()
- //logger.Infof("[%s] was initialized", cfg.Database.Driver)
- //model.InitCache(cfg.App.CacheType)
- //if cfg.App.CacheType != "" {
- // logger.Infof("[%s] was initialized", cfg.App.CacheType)
- //}
-
// initializing tracing
if cfg.App.EnableTrace {
tracer.InitWithConfig(
@@ -80,6 +72,14 @@ func InitApp() {
)
logger.Info("[resource statistics] was initialized")
}
+
+ // initializing database
+ //model.InitDB()
+ //logger.Infof("[%s] was initialized", cfg.Database.Driver)
+ //model.InitCache(cfg.App.CacheType)
+ //if cfg.App.CacheType != "" {
+ // logger.Infof("[%s] was initialized", cfg.App.CacheType)
+ //}
}
func initConfig() {
diff --git a/cmd/serverNameExample_mixExample/initial/initApp.go b/cmd/serverNameExample_mixExample/initial/initApp.go
index 4a9faa38..cd4f35e0 100644
--- a/cmd/serverNameExample_mixExample/initial/initApp.go
+++ b/cmd/serverNameExample_mixExample/initial/initApp.go
@@ -51,14 +51,6 @@ func InitApp() {
logger.Debug(config.Show())
logger.Info("[logger] was initialized")
- // initializing database
- model.InitDB()
- logger.Infof("[%s] was initialized", cfg.Database.Driver)
- model.InitCache(cfg.App.CacheType)
- if cfg.App.CacheType != "" {
- logger.Infof("[%s] was initialized", cfg.App.CacheType)
- }
-
// initializing tracing
if cfg.App.EnableTrace {
tracer.InitWithConfig(
@@ -80,6 +72,14 @@ func InitApp() {
)
logger.Info("[resource statistics] was initialized")
}
+
+ // initializing database
+ model.InitDB()
+ logger.Infof("[%s] was initialized", cfg.Database.Driver)
+ model.InitCache(cfg.App.CacheType)
+ if cfg.App.CacheType != "" {
+ logger.Infof("[%s] was initialized", cfg.App.CacheType)
+ }
}
func initConfig() {
diff --git a/go.mod b/go.mod
index b81eed8a..39a4d9cc 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,6 @@
module github.com/zhufuyi/sponge
-go 1.19
+go 1.20
require (
github.com/DATA-DOG/go-sqlmock v1.5.0
@@ -9,13 +9,12 @@ require (
github.com/blastrain/vitess-sqlparser v0.0.0-20201030050434-a139afbb1aba
github.com/bojand/ghz v0.117.0
github.com/dgraph-io/ristretto v0.1.1
+ github.com/fatih/color v1.13.0
github.com/felixge/fgprof v0.9.3
github.com/fsnotify/fsnotify v1.5.4
github.com/gin-contrib/cors v1.3.1
github.com/gin-gonic/gin v1.9.1
github.com/go-playground/validator/v10 v10.14.0
- github.com/go-redis/redis/extra/redisotel v0.3.0
- github.com/go-redis/redis/v8 v8.11.5
github.com/go-sql-driver/mysql v1.7.0
github.com/golang-jwt/jwt/v5 v5.0.0
github.com/golang/snappy v0.0.4
@@ -31,6 +30,8 @@ require (
github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.13.0
github.com/rabbitmq/amqp091-go v1.9.0
+ github.com/redis/go-redis/extra/redisotel/v9 v9.5.3
+ github.com/redis/go-redis/v9 v9.6.1
github.com/robfig/cron/v3 v3.0.1
github.com/shirou/gopsutil/v3 v3.23.8
github.com/spf13/cobra v1.4.0
@@ -98,7 +99,6 @@ require (
github.com/eapache/queue v1.1.0 // indirect
github.com/envoyproxy/go-control-plane v0.11.1 // indirect
github.com/envoyproxy/protoc-gen-validate v1.0.2 // indirect
- github.com/fatih/color v1.13.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-logr/logr v1.4.1 // indirect
@@ -110,7 +110,6 @@ require (
github.com/go-openapi/swag v0.19.15 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
- github.com/go-redis/redis/extra/rediscmd v0.2.0 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/glog v1.1.2 // indirect
@@ -172,6 +171,7 @@ require (
github.com/prometheus/common v0.37.0 // indirect
github.com/prometheus/procfs v0.8.0 // indirect
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
+ github.com/redis/go-redis/extra/rediscmd/v9 v9.5.3 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/shopspring/decimal v1.2.0 // indirect
github.com/spf13/afero v1.9.2 // indirect
diff --git a/go.sum b/go.sum
index 8ba11d68..ef7448c1 100644
--- a/go.sum
+++ b/go.sum
@@ -92,6 +92,8 @@ github.com/blastrain/vitess-sqlparser v0.0.0-20201030050434-a139afbb1aba h1:hBK2
github.com/blastrain/vitess-sqlparser v0.0.0-20201030050434-a139afbb1aba/go.mod h1:FGQp+RNQwVmLzDq6HBrYCww9qJQyNwH9Qji/quTQII4=
github.com/bojand/ghz v0.117.0 h1:dTMxg+tUcLMw8BYi7vQPjXsrM2DJ20ns53hz1am1SbQ=
github.com/bojand/ghz v0.117.0/go.mod h1:MXspmKdJie7NAS0IHzqG9X5h6zO3tIRGQ6Tkt8sAwa4=
+github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
+github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA=
github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8=
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
@@ -171,8 +173,6 @@ github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g=
github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw=
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
-github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
@@ -229,14 +229,6 @@ github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91
github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=
github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js=
github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
-github.com/go-redis/redis/extra/rediscmd v0.2.0 h1:A3bhCsCKsedClEH9/jYlcKqOuBoeeV+H0yDie5t+a6w=
-github.com/go-redis/redis/extra/rediscmd v0.2.0/go.mod h1:Z5bP1EHl9PvWhx/DupfCdZwB0JgOO3aVxWc/PFux+BE=
-github.com/go-redis/redis/extra/redisotel v0.3.0 h1:8rrizwFAUUeMgmelyiQi9KeFwmpQhay9E+/rE6qHsBM=
-github.com/go-redis/redis/extra/redisotel v0.3.0/go.mod h1:sGV3dQnPMBUuqzowEP2nZPhLXCMeh83nY64yaju249c=
-github.com/go-redis/redis/v8 v8.3.2/go.mod h1:jszGxBCez8QA1HWSmQxJO9Y82kNibbUmeYhKWrBejTU=
-github.com/go-redis/redis/v8 v8.5.0/go.mod h1:YmEcgBDttjnkbMzDAhDtQxY9yVA7jMN6PCR5HeMvqFE=
-github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
-github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc=
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
@@ -382,7 +374,6 @@ github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOn
github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4=
github.com/hashicorp/serf v0.9.7 h1:hkdgbqizGQHuU5IPqYM1JdSMV8nKfpuOnZYXssk9muY=
github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4=
-github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU=
github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
@@ -532,18 +523,6 @@ github.com/nacos-group/nacos-sdk-go/v2 v2.1.0/go.mod h1:ys/1adWeKXXzbNWfRNbaFlX/
github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM=
github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
-github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
-github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
-github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
-github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
-github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg=
-github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
-github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
-github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
-github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc=
-github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48=
-github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/otiai10/copy v1.7.0/go.mod h1:rmRl6QPdJj6EiUqXQ/4Nn2lLXoNQjFCQbbNrxgc/t3U=
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
@@ -607,6 +586,12 @@ github.com/rabbitmq/amqp091-go v1.9.0 h1:qrQtyzB4H8BQgEuJwhmVQqVHB9O4+MNDJCCAcpc
github.com/rabbitmq/amqp091-go v1.9.0/go.mod h1:+jPrT9iY2eLjRaMSRHUhc3z14E/l85kv/f+6luSD3pc=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
+github.com/redis/go-redis/extra/rediscmd/v9 v9.5.3 h1:1/BDligzCa40GTllkDnY3Y5DTHuKCONbB2JcRyIfl20=
+github.com/redis/go-redis/extra/rediscmd/v9 v9.5.3/go.mod h1:3dZmcLn3Qw6FLlWASn1g4y+YO9ycEFUOM+bhBmzLVKQ=
+github.com/redis/go-redis/extra/redisotel/v9 v9.5.3 h1:kuvuJL/+MZIEdvtb/kTBRiRgYaOmx1l+lYJyVdrRUOs=
+github.com/redis/go-redis/extra/redisotel/v9 v9.5.3/go.mod h1:7f/FMrf5RRRVHXgfk7CzSVzXHiWeuOQUu2bsVqWoa+g=
+github.com/redis/go-redis/v9 v9.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0y4=
+github.com/redis/go-redis/v9 v9.6.1/go.mod h1:0C0c6ycQsdpVNQpxb1njEQIqkx5UcsM8FJCQLgE9+RA=
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
@@ -732,22 +717,16 @@ go.opentelemetry.io/contrib v1.24.0 h1:Tfn7pP/482iIzeeba91tP52a1c1TEeqYc1saih+vB
go.opentelemetry.io/contrib v1.24.0/go.mod h1:usW9bPlrjHiJFbK0a6yK/M5wNHs3nLmtrT3vzhoD3co=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
-go.opentelemetry.io/otel v0.13.0/go.mod h1:dlSNewoRYikTkotEnxdmuBHgzT+k/idJSfDv/FxEnOY=
-go.opentelemetry.io/otel v0.16.0/go.mod h1:e4GKElweB8W2gWUqbghw0B8t5MCTccc9212eNHnOHwA=
-go.opentelemetry.io/otel v0.17.0/go.mod h1:Oqtdxmf7UtEvL037ohlgnaYa1h7GtMh0NcSd9eqkC9s=
go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
go.opentelemetry.io/otel/exporters/jaeger v1.17.0 h1:D7UpUy2Xc2wsi1Ras6V40q806WM07rqoCWzXu7Sqy+4=
go.opentelemetry.io/otel/exporters/jaeger v1.17.0/go.mod h1:nPCqOnEH9rNLKqH/+rrUjiMzHJdV1BlpKcTwRTyKkKI=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0 h1:s0PHtIkN+3xrbDOpt2M8OTG92cWqUESvzh2MxiR5xY8=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0/go.mod h1:hZlFbDbRt++MMPCCfSJfmhkGIWnX1h3XjkfxZUjLrIA=
-go.opentelemetry.io/otel/metric v0.17.0/go.mod h1:hUz9lH1rNXyEwWAhIWCMFWKhYtpASgSnObJFnU26dJ0=
go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=
go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=
-go.opentelemetry.io/otel/oteltest v0.17.0/go.mod h1:JT/LGFxPwpN+nlsTiinSYjdIx3hZIGqHCpChcIZmdoE=
go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw=
go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg=
-go.opentelemetry.io/otel/trace v0.17.0/go.mod h1:bIujpqg6ZL6xUTubIUgziI1jSaUPthmabA/ygf/6Cfg=
go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
@@ -823,7 +802,6 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -847,15 +825,12 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
@@ -903,7 +878,6 @@ golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -917,15 +891,12 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -942,7 +913,6 @@ golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -953,7 +923,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1056,7 +1025,6 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -1181,8 +1149,6 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
-google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
@@ -1193,7 +1159,6 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
@@ -1203,8 +1168,6 @@ gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/internal/handler/userExample.go.mgo b/internal/handler/userExample.go.mgo
index eaa13efe..a0af4bac 100644
--- a/internal/handler/userExample.go.mgo
+++ b/internal/handler/userExample.go.mgo
@@ -136,8 +136,8 @@ func (h *userExampleHandler) UpdateByID(c *gin.Context) {
response.Error(c, ecode.ErrUpdateByIDUserExample)
return
}
- userExample.ID = oid
// Note: if copier.Copy cannot assign a value to a field, add it here
+ userExample.ID = oid
ctx := middleware.WrapCtx(c)
err = h.iDao.UpdateByID(ctx, userExample)
diff --git a/internal/handler/userExample.go.mgo.exp b/internal/handler/userExample.go.mgo.exp
index c30625d7..2d3e2de4 100644
--- a/internal/handler/userExample.go.mgo.exp
+++ b/internal/handler/userExample.go.mgo.exp
@@ -142,8 +142,8 @@ func (h *userExampleHandler) UpdateByID(c *gin.Context) {
response.Error(c, ecode.ErrUpdateByIDUserExample)
return
}
- userExample.ID = oid
// Note: if copier.Copy cannot assign a value to a field, add it here
+ userExample.ID = oid
ctx := middleware.WrapCtx(c)
err = h.iDao.UpdateByID(ctx, userExample)
diff --git a/internal/model/init.go b/internal/model/init.go
index 1d1cde02..47032ad1 100644
--- a/internal/model/init.go
+++ b/internal/model/init.go
@@ -6,12 +6,13 @@ import (
"sync"
"time"
- "github.com/go-redis/redis/v8"
+ "github.com/redis/go-redis/v9"
"gorm.io/gorm"
"github.com/zhufuyi/sponge/pkg/ggorm"
"github.com/zhufuyi/sponge/pkg/goredis"
"github.com/zhufuyi/sponge/pkg/logger"
+ "github.com/zhufuyi/sponge/pkg/tracer"
"github.com/zhufuyi/sponge/pkg/utils"
"github.com/zhufuyi/sponge/internal/config"
@@ -72,7 +73,7 @@ func InitRedis() {
goredis.WithWriteTimeout(time.Duration(config.Get().Redis.WriteTimeout) * time.Second),
}
if config.Get().App.EnableTrace {
- opts = append(opts, goredis.WithEnableTrace())
+ opts = append(opts, goredis.WithTracing(tracer.GetProvider()))
}
var err error
diff --git a/internal/model/init.go.mgo b/internal/model/init.go.mgo
index e579be30..1427d45a 100644
--- a/internal/model/init.go.mgo
+++ b/internal/model/init.go.mgo
@@ -5,12 +5,13 @@ import (
"sync"
"time"
- "github.com/go-redis/redis/v8"
+ "github.com/redis/go-redis/v9"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"github.com/zhufuyi/sponge/pkg/goredis"
"github.com/zhufuyi/sponge/pkg/mgo"
+ "github.com/zhufuyi/sponge/pkg/tracer"
"github.com/zhufuyi/sponge/pkg/utils"
"github.com/zhufuyi/sponge/internal/config"
@@ -74,7 +75,7 @@ func InitRedis() {
goredis.WithWriteTimeout(time.Duration(config.Get().Redis.WriteTimeout) * time.Second),
}
if config.Get().App.EnableTrace {
- opts = append(opts, goredis.WithEnableTrace())
+ opts = append(opts, goredis.WithTracing(tracer.GetProvider()))
}
var err error
diff --git a/pkg/cache/redis.go b/pkg/cache/redis.go
index 22746dc1..9fbbb072 100644
--- a/pkg/cache/redis.go
+++ b/pkg/cache/redis.go
@@ -8,7 +8,7 @@ import (
"strings"
"time"
- "github.com/go-redis/redis/v8"
+ "github.com/redis/go-redis/v9"
"github.com/zhufuyi/sponge/pkg/encoding"
)
@@ -209,3 +209,182 @@ func BuildCacheKey(keyPrefix string, key string) (string, error) {
return cacheKey, nil
}
+
+// -------------------------------------------------------------------------------------------
+
+// redisClusterCache redis cluster cache object
+type redisClusterCache struct {
+ client *redis.ClusterClient
+ KeyPrefix string
+ encoding encoding.Encoding
+ DefaultExpireTime time.Duration
+ newObject func() interface{}
+}
+
+// NewRedisClusterCache new a cache
+func NewRedisClusterCache(client *redis.ClusterClient, keyPrefix string, encode encoding.Encoding, newObject func() interface{}) Cache {
+ return &redisClusterCache{
+ client: client,
+ KeyPrefix: keyPrefix,
+ encoding: encode,
+ newObject: newObject,
+ }
+}
+
+// Set one value
+func (c *redisClusterCache) Set(ctx context.Context, key string, val interface{}, expiration time.Duration) error {
+ buf, err := encoding.Marshal(c.encoding, val)
+ if err != nil {
+ return fmt.Errorf("encoding.Marshal error: %v, key=%s, val=%+v ", err, key, val)
+ }
+
+ cacheKey, err := BuildCacheKey(c.KeyPrefix, key)
+ if err != nil {
+ return fmt.Errorf("BuildCacheKey error: %v, key=%s", err, key)
+ }
+ //if expiration == 0 {
+ // expiration = DefaultExpireTime
+ //}
+ err = c.client.Set(ctx, cacheKey, buf, expiration).Err()
+ if err != nil {
+ return fmt.Errorf("c.client.Set error: %v, cacheKey=%s", err, cacheKey)
+ }
+ return nil
+}
+
+// Get one value
+func (c *redisClusterCache) Get(ctx context.Context, key string, val interface{}) error {
+ cacheKey, err := BuildCacheKey(c.KeyPrefix, key)
+ if err != nil {
+ return fmt.Errorf("BuildCacheKey error: %v, key=%s", err, key)
+ }
+
+ bytes, err := c.client.Get(ctx, cacheKey).Bytes()
+ // NOTE: don't handle the case where redis value is nil
+ // but leave it to the upstream for processing
+ if err != nil {
+ return err
+ }
+
+ // prevent Unmarshal from reporting an error if data is empty
+ if string(bytes) == "" {
+ return nil
+ }
+ if string(bytes) == NotFoundPlaceholder {
+ return ErrPlaceholder
+ }
+ err = encoding.Unmarshal(c.encoding, bytes, val)
+ if err != nil {
+ return fmt.Errorf("encoding.Unmarshal error: %v, key=%s, cacheKey=%s, type=%v, json=%+v ",
+ err, key, cacheKey, reflect.TypeOf(val), string(bytes))
+ }
+ return nil
+}
+
+// MultiSet set multiple values
+func (c *redisClusterCache) MultiSet(ctx context.Context, valueMap map[string]interface{}, expiration time.Duration) error {
+ if len(valueMap) == 0 {
+ return nil
+ }
+
+ // the key-value is paired and has twice the capacity of a map
+ paris := make([]interface{}, 0, 2*len(valueMap))
+ for key, value := range valueMap {
+ buf, err := encoding.Marshal(c.encoding, value)
+ if err != nil {
+ fmt.Printf("encoding.Marshal error, %v, value:%v\n", err, value)
+ continue
+ }
+ cacheKey, err := BuildCacheKey(c.KeyPrefix, key)
+ if err != nil {
+ fmt.Printf("BuildCacheKey error, %v, key:%v\n", err, key)
+ continue
+ }
+ paris = append(paris, []byte(cacheKey))
+ paris = append(paris, buf)
+ }
+ pipeline := c.client.Pipeline()
+ err := pipeline.MSet(ctx, paris...).Err()
+ if err != nil {
+ return fmt.Errorf("pipeline.MSet error: %v", err)
+ }
+ for i := 0; i < len(paris); i = i + 2 {
+ switch paris[i].(type) {
+ case []byte:
+ pipeline.Expire(ctx, string(paris[i].([]byte)), expiration)
+ default:
+ fmt.Printf("redis expire is unsupported key type: %+v\n", reflect.TypeOf(paris[i]))
+ }
+ }
+ _, err = pipeline.Exec(ctx)
+ if err != nil {
+ return fmt.Errorf("pipeline.Exec error: %v", err)
+ }
+ return nil
+}
+
+// MultiGet get multiple values
+func (c *redisClusterCache) MultiGet(ctx context.Context, keys []string, value interface{}) error {
+ if len(keys) == 0 {
+ return nil
+ }
+ cacheKeys := make([]string, len(keys))
+ for index, key := range keys {
+ cacheKey, err := BuildCacheKey(c.KeyPrefix, key)
+ if err != nil {
+ return fmt.Errorf("BuildCacheKey error: %v, key=%s", err, key)
+ }
+ cacheKeys[index] = cacheKey
+ }
+ values, err := c.client.MGet(ctx, cacheKeys...).Result()
+ if err != nil {
+ return fmt.Errorf("c.client.MGet error: %v, keys=%+v", err, cacheKeys)
+ }
+
+ // Injection into map via reflection
+ valueMap := reflect.ValueOf(value)
+ for i, v := range values {
+ if v == nil {
+ continue
+ }
+ object := c.newObject()
+ err = encoding.Unmarshal(c.encoding, []byte(v.(string)), object)
+ if err != nil {
+ fmt.Printf("unmarshal data error: %+v, key=%s, cacheKey=%s type=%v\n", err, keys[i], cacheKeys[i], reflect.TypeOf(value))
+ continue
+ }
+ valueMap.SetMapIndex(reflect.ValueOf(cacheKeys[i]), reflect.ValueOf(object))
+ }
+ return nil
+}
+
+// Del delete multiple values
+func (c *redisClusterCache) Del(ctx context.Context, keys ...string) error {
+ if len(keys) == 0 {
+ return nil
+ }
+
+ cacheKeys := make([]string, len(keys))
+ for index, key := range keys {
+ cacheKey, err := BuildCacheKey(c.KeyPrefix, key)
+ if err != nil {
+ continue
+ }
+ cacheKeys[index] = cacheKey
+ }
+ err := c.client.Del(ctx, cacheKeys...).Err()
+ if err != nil {
+ return fmt.Errorf("c.client.Del error: %v, keys=%+v", err, cacheKeys)
+ }
+ return nil
+}
+
+// SetCacheWithNotFound set value for notfound
+func (c *redisClusterCache) SetCacheWithNotFound(ctx context.Context, key string) error {
+ cacheKey, err := BuildCacheKey(c.KeyPrefix, key)
+ if err != nil {
+ return fmt.Errorf("BuildCacheKey error: %v, key=%s", err, key)
+ }
+
+ return c.client.Set(ctx, cacheKey, NotFoundPlaceholder, DefaultNotFoundExpireTime).Err()
+}
diff --git a/pkg/cache/redis_test.go b/pkg/cache/redis_test.go
index 32900ea8..057e8db9 100644
--- a/pkg/cache/redis_test.go
+++ b/pkg/cache/redis_test.go
@@ -16,7 +16,7 @@ type redisUser struct {
Name string
}
-func newRedisCache() *gotest.Cache {
+func newTestData() map[string]interface{} {
record1 := &redisUser{
ID: 1,
Name: "foo",
@@ -26,11 +26,14 @@ func newRedisCache() *gotest.Cache {
Name: "bar",
}
- testData := map[string]interface{}{
+ return map[string]interface{}{
utils.Uint64ToStr(record1.ID): record1,
utils.Uint64ToStr(record2.ID): record2,
}
+}
+func newRedisCache() *gotest.Cache {
+ testData := newTestData()
c := gotest.NewCache(testData)
cachePrefix := ""
c.ICache = NewRedisCache(c.RedisClient, cachePrefix, encoding.JSONEncoding{}, func() interface{} {
@@ -40,6 +43,17 @@ func newRedisCache() *gotest.Cache {
return c
}
+func newRedisClusterCache() *gotest.RCCache {
+ testData := newTestData()
+ c := gotest.NewRCCache(testData)
+ cachePrefix := ""
+ c.ICache = NewRedisClusterCache(c.RedisClient, cachePrefix, encoding.JSONEncoding{}, func() interface{} {
+ return &redisUser{}
+ })
+
+ return c
+}
+
func TestRedisCache(t *testing.T) {
c := newRedisCache()
defer c.Close()
@@ -121,6 +135,83 @@ func TestRedisCacheError(t *testing.T) {
assert.NoError(t, err)
}
+func TestRedisClusterCache(t *testing.T) {
+ c := newRedisClusterCache()
+ defer c.Close()
+ testData := c.TestDataSlice[0].(*redisUser)
+ iCache := c.ICache.(Cache)
+
+ key := utils.Uint64ToStr(testData.ID)
+ err := iCache.Set(c.Ctx, key, c.TestDataMap[key], time.Minute)
+ assert.NoError(t, err)
+
+ val := &redisUser{}
+ err = iCache.Get(c.Ctx, key, val)
+ assert.NoError(t, err)
+ assert.Equal(t, testData.Name, val.Name)
+
+ err = iCache.Del(c.Ctx, key)
+ assert.NoError(t, err)
+
+ err = iCache.MultiSet(c.Ctx, c.TestDataMap, time.Minute)
+ assert.NoError(t, err)
+
+ var keys []string
+ for k := range c.TestDataMap {
+ keys = append(keys, k)
+ }
+ vals := make(map[string]*redisUser)
+ err = iCache.MultiGet(c.Ctx, keys, vals)
+
+ assert.NoError(t, err)
+ assert.Equal(t, len(c.TestDataSlice), len(vals))
+ err = iCache.SetCacheWithNotFound(c.Ctx, "not_found")
+ assert.NoError(t, err)
+}
+
+func TestRedisClusterCacheError(t *testing.T) {
+ c := newRedisClusterCache()
+ defer c.Close()
+ testData := c.TestDataSlice[0].(*redisUser)
+ iCache := c.ICache.(Cache)
+
+ // Set empty key error test
+ key := utils.Uint64ToStr(testData.ID)
+ err := iCache.Set(c.Ctx, "", c.TestDataMap[key], time.Minute)
+ assert.Error(t, err)
+
+ // Set empty value error test
+ key = utils.Uint64ToStr(testData.ID)
+ err = iCache.Set(c.Ctx, key, nil, time.Minute)
+ assert.Error(t, err)
+
+ // Get empty key error test
+ val := &redisUser{}
+ err = iCache.Get(c.Ctx, "", val)
+ assert.Error(t, err)
+
+ // Get empty result test
+ key = utils.Uint64ToStr(testData.ID)
+ err = iCache.Get(c.Ctx, key, val)
+ assert.Error(t, err)
+
+ // Get result error test
+ key = utils.Uint64ToStr(testData.ID)
+ _ = iCache.Set(c.Ctx, key, c.TestDataMap[key], time.Minute)
+ time.Sleep(time.Millisecond)
+ err = iCache.Get(c.Ctx, key, nil)
+ assert.Error(t, err)
+
+ _ = iCache.MultiSet(c.Ctx, nil, time.Minute)
+ _ = iCache.MultiGet(c.Ctx, nil, time.Minute)
+
+ // Del empty key error test
+ err = iCache.Del(c.Ctx)
+ assert.NoError(t, err)
+ err = iCache.Del(c.Ctx, "")
+ assert.NoError(t, err)
+}
+
func TestBuildCacheKey(t *testing.T) {
_, err := BuildCacheKey("", "")
assert.Error(t, err)
diff --git a/pkg/goredis/README.md b/pkg/goredis/README.md
index 486aef0c..7a6ed129 100644
--- a/pkg/goredis/README.md
+++ b/pkg/goredis/README.md
@@ -1,6 +1,6 @@
## goredis
-`goredis` library wrapped in [go-redis](github.com/go-redis/redis).
+`goredis` library wrapped in [go-redis](https://github.com/redis/go-redis).
@@ -10,13 +10,13 @@
```go
// way 1: redis version 6.0 or above
- redisCli, err := goredis.Init("default:123456@127.0.0.1:6379", goredis.WithEnableTrace())
+ redisCli, err := goredis.Init("default:123456@127.0.0.1:6379") // can set parameters such as timeout, tls, tracing, such as goredis.Withxxx()
if err != nil {
panic("goredis.Init error: " + err.Error())
}
// way 2: redis version 5.0 or below
- redisCli := goredis.Init2("127.0.0.1:6379", "123456", 0, goredis.WithEnableTrace())
+ redisCli, err := goredis.InitSingle("127.0.0.1:6379", "123456", 0) // can set parameters such as timeout, tls, tracing, such as goredis.Withxxx()
```
@@ -24,8 +24,8 @@
#### Sentinel
```go
- addrs := []string{"127.0.0.1:6380", "127.0.0.1:6381", "127.0.0.1:6382"}
- rdb := goredis.InitSentinel("master", addrs, "default", "123456", goredis.WithEnableTrace())
+ addrs := []string{"127.0.0.1:6380", "127.0.0.1:6381", "127.0.0.1:6382","127.0.0.1:26380", "127.0.0.1:26381", "127.0.0.1:26382"}
+ rdbCli, err : := goredis.InitSentinel("mymaster", addrs, "", "123456") // can set parameters such as timeout, tls, tracing, such as goredis.Withxxx()
```
@@ -33,8 +33,8 @@
#### Cluster
```go
- addrs := []string{"127.0.0.1:6380", "127.0.0.1:6381", "127.0.0.1:6382"}
- clusterRdb := goredis.InitCluster(addrs, "default", "123456", goredis.WithEnableTrace())
+ addrs := []string{"127.0.0.1:6380", "127.0.0.1:6381", "127.0.0.1:6382","127.0.0.1:6383", "127.0.0.1:6384", "127.0.0.1:6385"}
+ clusterRdb, err : := goredis.InitCluster(addrs, "", "123456") // can set parameters such as timeout, tls, tracing, such as goredis.Withxxx()
```
diff --git a/pkg/goredis/goredis.go b/pkg/goredis/goredis.go
index 9316d0fc..abab772e 100644
--- a/pkg/goredis/goredis.go
+++ b/pkg/goredis/goredis.go
@@ -2,10 +2,12 @@
package goredis
import (
+ "context"
"strings"
+ "time"
- "github.com/go-redis/redis/extra/redisotel"
- "github.com/go-redis/redis/v8"
+ "github.com/redis/go-redis/extra/redisotel/v9"
+ "github.com/redis/go-redis/v9"
)
const (
@@ -30,54 +32,32 @@ func Init(dsn string, opts ...Option) (*redis.Client, error) {
return nil, err
}
- rdb := redis.NewClient(opt)
-
- if o.enableTrace {
- rdb.AddHook(redisotel.TracingHook{})
+ // replace single options if provided
+ if o.singleOptions != nil {
+ opt = o.singleOptions
}
- return rdb, nil
-}
-
-func getRedisOpt(dsn string, opts *options) (*redis.Options, error) {
- dsn = strings.ReplaceAll(dsn, " ", "")
- if len(dsn) > 8 {
- if !strings.Contains(dsn[len(dsn)-3:], "/") {
- dsn += "/0" // use db 0 by default
- }
+ rdb := redis.NewClient(opt)
- if dsn[:8] != "redis://" && dsn[:9] != "rediss://" {
- dsn = "redis://" + dsn
+ if o.tracerProvider != nil {
+ err = redisotel.InstrumentTracing(rdb, redisotel.WithTracerProvider(o.tracerProvider))
+ if err != nil {
+ return nil, err
}
}
- redisOpts, err := redis.ParseURL(dsn)
- if err != nil {
- return nil, err
- }
+ ctx, _ := context.WithTimeout(context.Background(), 15*time.Second) //nolint
+ err = rdb.Ping(ctx).Err()
- if opts.dialTimeout > 0 {
- redisOpts.DialTimeout = opts.dialTimeout
- }
- if opts.readTimeout > 0 {
- redisOpts.ReadTimeout = opts.readTimeout
- }
- if opts.writeTimeout > 0 {
- redisOpts.WriteTimeout = opts.writeTimeout
- }
- if opts.tlsConfig != nil {
- redisOpts.TLSConfig = opts.tlsConfig
- }
-
- return redisOpts, nil
+ return rdb, err
}
-// Init2 connecting to redis
-func Init2(addr string, password string, db int, opts ...Option) *redis.Client {
+// InitSingle connecting to single redis instance
+func InitSingle(addr string, password string, db int, opts ...Option) (*redis.Client, error) {
o := defaultOptions()
o.apply(opts...)
- rdb := redis.NewClient(&redis.Options{
+ opt := &redis.Options{
Addr: addr,
Password: password,
DB: db,
@@ -85,21 +65,34 @@ func Init2(addr string, password string, db int, opts ...Option) *redis.Client {
ReadTimeout: o.readTimeout,
WriteTimeout: o.writeTimeout,
TLSConfig: o.tlsConfig,
- })
+ }
- if o.enableTrace {
- rdb.AddHook(redisotel.TracingHook{})
+ // replace single options if provided
+ if o.singleOptions != nil {
+ opt = o.singleOptions
}
- return rdb
+ rdb := redis.NewClient(opt)
+
+ if o.tracerProvider != nil {
+ err := redisotel.InstrumentTracing(rdb, redisotel.WithTracerProvider(o.tracerProvider))
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ ctx, _ := context.WithTimeout(context.Background(), 15*time.Second) //nolint
+ err := rdb.Ping(ctx).Err()
+
+ return rdb, err
}
// InitSentinel connecting to redis for sentinel, all redis username and password are the same
-func InitSentinel(masterName string, addrs []string, username string, password string, opts ...Option) *redis.Client {
+func InitSentinel(masterName string, addrs []string, username string, password string, opts ...Option) (*redis.Client, error) {
o := defaultOptions()
o.apply(opts...)
- rdb := redis.NewFailoverClient(&redis.FailoverOptions{
+ opt := &redis.FailoverOptions{
MasterName: masterName,
SentinelAddrs: addrs,
Username: username,
@@ -108,21 +101,34 @@ func InitSentinel(masterName string, addrs []string, username string, password s
ReadTimeout: o.readTimeout,
WriteTimeout: o.writeTimeout,
TLSConfig: o.tlsConfig,
- })
+ }
- if o.enableTrace {
- rdb.AddHook(redisotel.TracingHook{})
+ // replace sentinel options if provided
+ if o.sentinelOptions != nil {
+ opt = o.sentinelOptions
}
- return rdb
+ rdb := redis.NewFailoverClient(opt)
+
+ if o.tracerProvider != nil {
+ err := redisotel.InstrumentTracing(rdb, redisotel.WithTracerProvider(o.tracerProvider))
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ ctx, _ := context.WithTimeout(context.Background(), 15*time.Second) //nolint
+ err := rdb.Ping(ctx).Err()
+
+ return rdb, err
}
// InitCluster connecting to redis for cluster, all redis username and password are the same
-func InitCluster(addrs []string, username string, password string, opts ...Option) *redis.ClusterClient {
+func InitCluster(addrs []string, username string, password string, opts ...Option) (*redis.ClusterClient, error) {
o := defaultOptions()
o.apply(opts...)
- clusterRdb := redis.NewClusterClient(&redis.ClusterOptions{
+ opt := &redis.ClusterOptions{
Addrs: addrs,
Username: username,
Password: password,
@@ -130,11 +136,59 @@ func InitCluster(addrs []string, username string, password string, opts ...Optio
ReadTimeout: o.readTimeout,
WriteTimeout: o.writeTimeout,
TLSConfig: o.tlsConfig,
+ }
+
+ // replace cluster options if provided
+ if o.clusterOptions != nil {
+ opt = o.clusterOptions
+ }
+
+ clusterRdb := redis.NewClusterClient(opt)
+
+ if o.tracerProvider != nil {
+ err := redisotel.InstrumentTracing(clusterRdb, redisotel.WithTracerProvider(o.tracerProvider))
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ ctx, _ := context.WithTimeout(context.Background(), 15*time.Second) //nolint
+ err := clusterRdb.ForEachMaster(ctx, func(ctx context.Context, client *redis.Client) error {
+ return client.Ping(ctx).Err()
})
- if o.enableTrace {
- clusterRdb.AddHook(redisotel.TracingHook{})
+ return clusterRdb, err
+}
+
+func getRedisOpt(dsn string, opts *options) (*redis.Options, error) {
+ dsn = strings.ReplaceAll(dsn, " ", "")
+ if len(dsn) > 8 {
+ if !strings.Contains(dsn[len(dsn)-3:], "/") {
+ dsn += "/0" // use db 0 by default
+ }
+
+ if dsn[:8] != "redis://" && dsn[:9] != "rediss://" {
+ dsn = "redis://" + dsn
+ }
+ }
+
+ redisOpts, err := redis.ParseURL(dsn)
+ if err != nil {
+ return nil, err
}
- return clusterRdb
+ if opts.dialTimeout > 0 {
+ redisOpts.DialTimeout = opts.dialTimeout
+ }
+ if opts.readTimeout > 0 {
+ redisOpts.ReadTimeout = opts.readTimeout
+ }
+ if opts.writeTimeout > 0 {
+ redisOpts.WriteTimeout = opts.writeTimeout
+ }
+ if opts.tlsConfig != nil {
+ redisOpts.TLSConfig = opts.tlsConfig
+ }
+
+ return redisOpts, nil
}
diff --git a/pkg/goredis/goredis_test.go b/pkg/goredis/goredis_test.go
index 523a800c..40f8c608 100644
--- a/pkg/goredis/goredis_test.go
+++ b/pkg/goredis/goredis_test.go
@@ -1,14 +1,19 @@
package goredis
import (
- "crypto/tls"
+ "fmt"
"testing"
"time"
+ "github.com/alicebob/miniredis/v2"
"github.com/stretchr/testify/assert"
)
func TestInit(t *testing.T) {
+ redisServer, _ := miniredis.Run()
+ defer redisServer.Close()
+ addr := redisServer.Addr()
+
type args struct {
redisURL string
}
@@ -19,78 +24,96 @@ func TestInit(t *testing.T) {
}{
{
name: " no password, no db",
- args: args{"127.0.0.1:6379"},
+ args: args{addr},
wantErr: false,
},
{
name: "has password, no db",
- args: args{"root:123456@127.0.0.1:6379"},
+ args: args{"root:123456@" + addr},
wantErr: false,
},
{
name: "no password, has db",
- args: args{"127.0.0.1:6379/5"},
+ args: args{addr + "/5"},
wantErr: false,
},
{
name: "has password, has db",
- args: args{"root:123456@127.0.0.1:6379/5"},
+ args: args{fmt.Sprintf("root:123456@%s/5", addr)},
wantErr: false,
},
{
name: "has redis prefix",
- args: args{"redis://root:123456@127.0.0.1:6379/7"},
+ args: args{fmt.Sprintf("redis://root:123456@%s/5", addr)},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- _, err := Init(tt.args.redisURL,
- WithEnableTrace(),
+ rdb, err := Init(tt.args.redisURL,
WithDialTimeout(time.Second),
WithReadTimeout(time.Second),
WithWriteTimeout(time.Second),
- WithTLSConfig(&tls.Config{}),
+ WithEnableTrace(),
+ WithTracing(nil), // nil means no set field
+ WithTLSConfig(nil), // nil means no set field
)
if (err != nil) != tt.wantErr {
- t.Errorf("Init() error = %v, wantErr %v", err, tt.wantErr)
+ t.Logf("error = %v, wantErr %v", err, tt.wantErr)
return
}
+ assert.NotNil(t, rdb)
})
}
}
-func TestInit2(t *testing.T) {
- rdb := Init2("127.0.0.1:6379", "123456", 0,
- WithEnableTrace(),
+func TestInitSingle(t *testing.T) {
+ redisServer, _ := miniredis.Run()
+ defer redisServer.Close()
+ addr := redisServer.Addr()
+
+ rdb, err := InitSingle(addr, "", 0,
WithDialTimeout(time.Second),
WithReadTimeout(time.Second),
WithWriteTimeout(time.Second),
- WithTLSConfig(&tls.Config{}),
+ WithTracing(nil), // nil means no set field
+ WithTLSConfig(nil), // nil means no set field
+ WithSingleOptions(nil), // nil means no set field
)
+ assert.Nil(t, err)
assert.NotNil(t, rdb)
}
func TestInitSentinel(t *testing.T) {
- addrs := []string{"127.0.0.1:6380", "127.0.0.1:6381", "127.0.0.1:6382"}
- rdb := InitSentinel("master", addrs, "default", "123456",
- WithEnableTrace(),
+ redisServer, _ := miniredis.Run()
+ defer redisServer.Close()
+ addr := redisServer.Addr()
+
+ rdb, err := InitSentinel("mymaster", []string{addr}, "", "",
WithDialTimeout(time.Second),
WithReadTimeout(time.Second),
WithWriteTimeout(time.Second),
- WithTLSConfig(&tls.Config{}),
+ WithTracing(nil), // nil means no set field
+ WithTLSConfig(nil), // nil means no set field
+ WithSentinelOptions(nil), // nil means no set field
)
+ t.Log(err)
assert.NotNil(t, rdb)
}
func TestInitCluster(t *testing.T) {
- addrs := []string{"127.0.0.1:6380", "127.0.0.1:6381", "127.0.0.1:6382"}
- clusterRdb := InitCluster(addrs, "default", "123456",
- WithEnableTrace(),
- WithDialTimeout(time.Second),
+ redisServer, _ := miniredis.Run()
+ defer redisServer.Close()
+ addr := redisServer.Addr()
+
+ clusterRdb, err := InitCluster([]string{addr}, "", "",
+ WithDialTimeout(time.Second*15),
WithReadTimeout(time.Second),
WithWriteTimeout(time.Second),
- WithTLSConfig(&tls.Config{}),
+ WithTracing(nil), // nil means no set field
+ WithTLSConfig(nil), // nil means no set field
+ WithClusterOptions(nil), // nil means no set field
)
+ assert.Nil(t, err)
assert.NotNil(t, clusterRdb)
}
diff --git a/pkg/goredis/option.go b/pkg/goredis/option.go
index 98a8b209..7e07406a 100644
--- a/pkg/goredis/option.go
+++ b/pkg/goredis/option.go
@@ -3,18 +3,32 @@ package goredis
import (
"crypto/tls"
"time"
+
+ "github.com/redis/go-redis/v9"
+ "go.opentelemetry.io/otel/sdk/trace"
)
// Option set the redis options.
type Option func(*options)
type options struct {
- enableTrace bool
dialTimeout time.Duration
readTimeout time.Duration
writeTimeout time.Duration
+ tlsConfig *tls.Config
+
+ // Note: this field is only used for Init and InitSingle, and the other parameters will be ignored.
+ singleOptions *redis.Options
+
+ // Note: this field is only used for InitSentinel, and the other parameters will be ignored.
+ sentinelOptions *redis.FailoverOptions
- tlsConfig *tls.Config
+ // Note: this field is only used for InitCluster, and the other parameters will be ignored.
+ clusterOptions *redis.ClusterOptions
+
+ // deprecated: use tp instead
+ enableTrace bool
+ tracerProvider *trace.TracerProvider
}
func (o *options) apply(opts ...Option) {
@@ -30,13 +44,21 @@ func defaultOptions() *options {
}
}
-// WithEnableTrace use trace
+// WithEnableTrace use trace, redis v8
+// Deprecated: use WithEnableTracer instead
func WithEnableTrace() Option {
return func(o *options) {
o.enableTrace = true
}
}
+// WithTracing set redis tracer provider, redis v9
+func WithTracing(tp *trace.TracerProvider) Option {
+ return func(o *options) {
+ o.tracerProvider = tp
+ }
+}
+
// WithDialTimeout set dail timeout
func WithDialTimeout(t time.Duration) Option {
return func(o *options) {
@@ -64,3 +86,24 @@ func WithTLSConfig(c *tls.Config) Option {
o.tlsConfig = c
}
}
+
+// WithSingleOptions set single redis options
+func WithSingleOptions(opt *redis.Options) Option {
+ return func(o *options) {
+ o.singleOptions = opt
+ }
+}
+
+// WithSentinelOptions set redis sentinel options
+func WithSentinelOptions(opt *redis.FailoverOptions) Option {
+ return func(o *options) {
+ o.sentinelOptions = opt
+ }
+}
+
+// WithClusterOptions set redis cluster options
+func WithClusterOptions(opt *redis.ClusterOptions) Option {
+ return func(o *options) {
+ o.clusterOptions = opt
+ }
+}
diff --git a/pkg/gotest/cache.go b/pkg/gotest/cache.go
index 55143fba..5db926ef 100644
--- a/pkg/gotest/cache.go
+++ b/pkg/gotest/cache.go
@@ -4,7 +4,7 @@ import (
"context"
"github.com/alicebob/miniredis/v2"
- "github.com/go-redis/redis/v8"
+ "github.com/redis/go-redis/v9"
"github.com/zhufuyi/sponge/pkg/utils"
)
@@ -58,3 +58,55 @@ func (c *Cache) GetIDs() []uint64 {
func (c *Cache) GetTestData() map[string]interface{} {
return c.TestDataMap
}
+
+// -------------------------------------------------------------------------------------------
+
+// RCCache redis cluster cache
+type RCCache struct {
+ Ctx context.Context
+ TestDataSlice []interface{}
+ TestDataMap map[string]interface{}
+ RedisClient *redis.ClusterClient
+ redisServer *miniredis.Miniredis
+ ICache interface{}
+}
+
+// NewRCCache instantiated redis cluster cache
+func NewRCCache(testDataMap map[string]interface{}) *RCCache {
+ var tds []interface{}
+ for _, data := range testDataMap {
+ tds = append(tds, data)
+ }
+
+ redisServer, err := miniredis.Run()
+ if err != nil {
+ panic(err)
+ }
+
+ return &RCCache{
+ Ctx: context.Background(),
+ TestDataSlice: tds,
+ TestDataMap: testDataMap,
+ RedisClient: redis.NewClusterClient(&redis.ClusterOptions{Addrs: []string{redisServer.Addr()}}),
+ redisServer: redisServer,
+ }
+}
+
+// Close redis server
+func (c *RCCache) Close() {
+ c.redisServer.Close()
+}
+
+// GetIDs get test data ids
+func (c *RCCache) GetIDs() []uint64 {
+ var ids []uint64
+ for idStr := range c.TestDataMap {
+ ids = append(ids, utils.StrToUint64(idStr))
+ }
+ return ids
+}
+
+// GetTestData get test data
+func (c *RCCache) GetTestData() map[string]interface{} {
+ return c.TestDataMap
+}
diff --git a/pkg/gotest/cache_test.go b/pkg/gotest/cache_test.go
index ca812553..696f7bdd 100644
--- a/pkg/gotest/cache_test.go
+++ b/pkg/gotest/cache_test.go
@@ -4,40 +4,55 @@ import (
"testing"
)
-func TestNewRedisCache(t *testing.T) {
- var testData = map[string]interface{}{
+func getTestData() map[string]interface{} {
+ return map[string]interface{}{
"1": "foo",
"2": "bar",
}
+}
+func TestNewRedisCache(t *testing.T) {
+ testData := getTestData()
c := NewCache(testData)
c.ICache = struct{}{}
-
- defer c.Close()
+ c.Close()
}
func TestRedisCache_GetIDs(t *testing.T) {
- var testData = map[string]interface{}{
- "1": "foo",
- "2": "bar",
- }
-
+ testData := getTestData()
c := NewCache(testData)
c.ICache = struct{}{}
- defer c.Close()
-
+ c.Close()
t.Log(c.GetIDs())
}
func TestRedisCache_GetTestData(t *testing.T) {
- var testData = map[string]interface{}{
- "1": "foo",
- "2": "bar",
- }
+ testData := getTestData()
+ c := NewCache(testData)
+ c.ICache = struct{}{}
+ c.Close()
+ t.Log(c.GetTestData())
+}
+func TestNewRedisClusterCache(t *testing.T) {
+ testData := getTestData()
c := NewCache(testData)
c.ICache = struct{}{}
- defer c.Close()
+ c.Close()
+}
- t.Log(c.GetTestData())
+func TestRedisClusterCache_GetIDs(t *testing.T) {
+ testData := getTestData()
+ rc := NewRCCache(testData)
+ rc.ICache = struct{}{}
+ rc.Close()
+ t.Log(rc.GetIDs())
+}
+
+func TestRedisClusterCache_GetTestData(t *testing.T) {
+ testData := getTestData()
+ rc := NewRCCache(testData)
+ rc.ICache = struct{}{}
+ rc.Close()
+ t.Log(rc.GetTestData())
}
diff --git a/pkg/shield/circuitbreaker/sre.go b/pkg/shield/circuitbreaker/sre.go
index a7398329..180b632c 100644
--- a/pkg/shield/circuitbreaker/sre.go
+++ b/pkg/shield/circuitbreaker/sre.go
@@ -140,7 +140,7 @@ func (b *Breaker) Allow() error {
return nil
}
-// MarkSuccess mark requeest is success.
+// MarkSuccess mark request is success.
func (b *Breaker) MarkSuccess() {
b.stat.Add(1)
}
diff --git a/pkg/tracer/tracerProvider.go b/pkg/tracer/tracerProvider.go
index 85969a0a..9a7b2193 100644
--- a/pkg/tracer/tracerProvider.go
+++ b/pkg/tracer/tracerProvider.go
@@ -63,3 +63,11 @@ func InitWithConfig(appName string, appEnv string, appVersion string,
SetTraceName(appName)
}
+
+// GetProvider get tracer provider
+func GetProvider() *trace.TracerProvider {
+ if tp == nil {
+ panic("tracer provider is nil, initialize it first with InitWithConfig(...)")
+ }
+ return tp
+}
diff --git a/pkg/tracer/tracerProvider_test.go b/pkg/tracer/tracerProvider_test.go
index 6691e97d..90a66f0e 100644
--- a/pkg/tracer/tracerProvider_test.go
+++ b/pkg/tracer/tracerProvider_test.go
@@ -23,6 +23,7 @@ func TestClose(t *testing.T) {
assert.NoError(t, err)
resource := NewResource()
Init(exporter, resource)
+ GetProvider()
_ = Close(context.Background())
tp = nil