作者 yangfu

add cache

@@ -11,9 +11,7 @@ require ( @@ -11,9 +11,7 @@ require (
11 github.com/gavv/httpexpect v2.0.0+incompatible 11 github.com/gavv/httpexpect v2.0.0+incompatible
12 github.com/go-pg/pg/v10 v10.9.0 12 github.com/go-pg/pg/v10 v10.9.0
13 github.com/google/go-querystring v1.1.0 // indirect 13 github.com/google/go-querystring v1.1.0 // indirect
14 - github.com/gorilla/websocket v1.4.2 // indirect  
15 github.com/imkira/go-interpol v1.1.0 // indirect 14 github.com/imkira/go-interpol v1.1.0 // indirect
16 - github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 // indirect  
17 github.com/linmadan/egglib-go v0.0.0-20210313060205-8b5e456b11f7 15 github.com/linmadan/egglib-go v0.0.0-20210313060205-8b5e456b11f7
18 github.com/mattn/go-colorable v0.1.8 // indirect 16 github.com/mattn/go-colorable v0.1.8 // indirect
19 github.com/moul/http2curl v1.0.0 // indirect 17 github.com/moul/http2curl v1.0.0 // indirect
@@ -21,6 +19,7 @@ require ( @@ -21,6 +19,7 @@ require (
21 github.com/onsi/gomega v1.11.0 19 github.com/onsi/gomega v1.11.0
22 github.com/sergi/go-diff v1.2.0 // indirect 20 github.com/sergi/go-diff v1.2.0 // indirect
23 github.com/smartystreets/goconvey v1.6.4 // indirect 21 github.com/smartystreets/goconvey v1.6.4 // indirect
  22 + github.com/tiptok/gocomm v1.0.12
24 github.com/valyala/fasthttp v1.23.0 // indirect 23 github.com/valyala/fasthttp v1.23.0 // indirect
25 github.com/xeipuuv/gojsonschema v1.2.0 // indirect 24 github.com/xeipuuv/gojsonschema v1.2.0 // indirect
26 github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 // indirect 25 github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 // indirect
此 diff 太大无法显示。
@@ -3,6 +3,7 @@ package main @@ -3,6 +3,7 @@ package main
3 import ( 3 import (
4 "github.com/beego/beego/v2/server/web" 4 "github.com/beego/beego/v2/server/web"
5 _ "gitlab.fjmaimaimai.com/mmm-go-pp/partner01/pkg/infrastructure/pg" 5 _ "gitlab.fjmaimaimai.com/mmm-go-pp/partner01/pkg/infrastructure/pg"
  6 + _ "gitlab.fjmaimaimai.com/mmm-go-pp/partner01/pkg/infrastructure/redis"
6 _ "gitlab.fjmaimaimai.com/mmm-go-pp/partner01/pkg/port/beego" 7 _ "gitlab.fjmaimaimai.com/mmm-go-pp/partner01/pkg/port/beego"
7 ) 8 )
8 9
  1 +package constant
  2 +
  3 +import "os"
  4 +
  5 +var REDIS_HOST = "127.0.0.1"
  6 +var REDIS_PORT = "6379"
  7 +var REDIS_AUTH = ""
  8 +
  9 +func init() {
  10 + if os.Getenv("REDIS_HOST") != "" {
  11 + REDIS_HOST = os.Getenv("REDIS_HOST")
  12 + REDIS_AUTH = os.Getenv("REDIS_AUTH")
  13 + }
  14 + if os.Getenv("REDIS_PORT") != "" {
  15 + REDIS_PORT = os.Getenv("REDIS_PORT")
  16 + }
  17 + if _, ok := os.LookupEnv("REDIS_AUTH"); ok {
  18 + REDIS_AUTH = os.Getenv("REDIS_AUTH")
  19 + }
  20 +}
@@ -2,6 +2,7 @@ package domain @@ -2,6 +2,7 @@ package domain
2 2
3 import ( 3 import (
4 "fmt" 4 "fmt"
  5 + "gitlab.fjmaimaimai.com/mmm-go-pp/partner01/pkg/constant"
5 "time" 6 "time"
6 ) 7 )
7 8
@@ -149,3 +150,10 @@ func CheckPartnerUserType(dm *User) (*User, error) { @@ -149,3 +150,10 @@ func CheckPartnerUserType(dm *User) (*User, error) {
149 } 150 }
150 return dm, nil 151 return dm, nil
151 } 152 }
  153 +
  154 +func (m *User) CacheKeyFunc() string {
  155 + if m.UserId == 0 {
  156 + return ""
  157 + }
  158 + return fmt.Sprintf("%v:cache:Users:id:%v", constant.POSTGRESQL_DB_NAME, m.UserId)
  159 +}
  1 +package redis
  2 +
  3 +import (
  4 + "github.com/tiptok/gocomm/pkg/cache"
  5 + "github.com/tiptok/gocomm/pkg/cache/gzcache"
  6 + "github.com/tiptok/gocomm/pkg/log"
  7 + "gitlab.fjmaimaimai.com/mmm-go-pp/partner01/pkg/constant"
  8 +)
  9 +
  10 +func init() {
  11 + //redisSource := fmt.Sprintf("%v:%v", constant.REDIS_HOST, constant.REDIS_PORT)
  12 + //err := redis.InitWithDb(100, redisSource, constant.REDIS_AUTH, "0")
  13 + //if err != nil {
  14 + // log.Error(err)
  15 + //}
  16 + //cache.InitDefault(cache.WithDefaultRedisPool(redis.GetRedisPool()))
  17 + cache.InitMultiLevelCache(cache.WithDebugLog(true, log.Logger))
  18 + cache.RegisterCache(gzcache.NewNodeCache(constant.REDIS_HOST+":"+constant.REDIS_PORT, constant.REDIS_AUTH))
  19 +}
@@ -3,6 +3,7 @@ package repository @@ -3,6 +3,7 @@ package repository
3 import ( 3 import (
4 "fmt" 4 "fmt"
5 "github.com/go-pg/pg/v10" 5 "github.com/go-pg/pg/v10"
  6 + "github.com/tiptok/gocomm/pkg/cache"
6 7
7 "github.com/linmadan/egglib-go/persistent/pg/sqlbuilder" 8 "github.com/linmadan/egglib-go/persistent/pg/sqlbuilder"
8 pgTransaction "github.com/linmadan/egglib-go/transaction/pg" 9 pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
@@ -13,6 +14,7 @@ import ( @@ -13,6 +14,7 @@ import (
13 ) 14 )
14 15
15 type UserRepository struct { 16 type UserRepository struct {
  17 + *cache.CachedRepository
16 transactionContext *pgTransaction.TransactionContext 18 transactionContext *pgTransaction.TransactionContext
17 } 19 }
18 20
@@ -38,7 +40,7 @@ func (repository *UserRepository) Save(user *domain.User) (*domain.User, error) @@ -38,7 +40,7 @@ func (repository *UserRepository) Save(user *domain.User) (*domain.User, error)
38 "access_partners", 40 "access_partners",
39 "create_at", 41 "create_at",
40 "update_at", 42 "update_at",
41 - "delete_at", 43 + //"delete_at",
42 } 44 }
43 insertFieldsSnippet := sqlbuilder.SqlFieldsSnippet(sqlBuildFields) 45 insertFieldsSnippet := sqlbuilder.SqlFieldsSnippet(sqlBuildFields)
44 insertPlaceHoldersSnippet := sqlbuilder.SqlPlaceHoldersSnippet(sqlBuildFields) 46 insertPlaceHoldersSnippet := sqlbuilder.SqlPlaceHoldersSnippet(sqlBuildFields)
@@ -87,6 +89,7 @@ func (repository *UserRepository) Save(user *domain.User) (*domain.User, error) @@ -87,6 +89,7 @@ func (repository *UserRepository) Save(user *domain.User) (*domain.User, error)
87 return user, err 89 return user, err
88 } 90 }
89 } else { 91 } else {
  92 + queryFunc := func() (interface{}, error) {
90 if _, err := tx.QueryOne( 93 if _, err := tx.QueryOne(
91 pg.Scan( 94 pg.Scan(
92 &user.UserId, 95 &user.UserId,
@@ -118,6 +121,11 @@ func (repository *UserRepository) Save(user *domain.User) (*domain.User, error) @@ -118,6 +121,11 @@ func (repository *UserRepository) Save(user *domain.User) (*domain.User, error)
118 ); err != nil { 121 ); err != nil {
119 return user, err 122 return user, err
120 } 123 }
  124 + return user, nil
  125 + }
  126 + if _, err := repository.Query(queryFunc, user.CacheKeyFunc()); err != nil {
  127 + return user, err
  128 + }
121 } 129 }
122 return user, nil 130 return user, nil
123 } 131 }
@@ -125,7 +133,10 @@ func (repository *UserRepository) Remove(user *domain.User) (*domain.User, error @@ -125,7 +133,10 @@ func (repository *UserRepository) Remove(user *domain.User) (*domain.User, error
125 tx := repository.transactionContext.PgTx 133 tx := repository.transactionContext.PgTx
126 userModel := new(models.User) 134 userModel := new(models.User)
127 userModel.UserId = user.Identify().(int64) 135 userModel.UserId = user.Identify().(int64)
128 - if _, err := tx.Model(userModel).WherePK().Delete(); err != nil { 136 + queryFunc := func() (interface{}, error) {
  137 + return tx.Model(userModel).WherePK().Delete()
  138 + }
  139 + if _, err := repository.Query(queryFunc, user.CacheKeyFunc()); err != nil {
129 return user, err 140 return user, err
130 } 141 }
131 return user, nil 142 return user, nil
@@ -133,6 +144,7 @@ func (repository *UserRepository) Remove(user *domain.User) (*domain.User, error @@ -133,6 +144,7 @@ func (repository *UserRepository) Remove(user *domain.User) (*domain.User, error
133 func (repository *UserRepository) FindOne(queryOptions map[string]interface{}) (*domain.User, error) { 144 func (repository *UserRepository) FindOne(queryOptions map[string]interface{}) (*domain.User, error) {
134 tx := repository.transactionContext.PgTx 145 tx := repository.transactionContext.PgTx
135 userModel := new(models.User) 146 userModel := new(models.User)
  147 + queryFunc := func() (interface{}, error) {
136 query := sqlbuilder.BuildQuery(tx.Model(userModel), queryOptions) 148 query := sqlbuilder.BuildQuery(tx.Model(userModel), queryOptions)
137 query.SetWhereByQueryOption("users.user_id = ?", "userId") 149 query.SetWhereByQueryOption("users.user_id = ?", "userId")
138 query.SetWhereByQueryOption("users.status = ?", "status") 150 query.SetWhereByQueryOption("users.status = ?", "status")
@@ -147,6 +159,15 @@ func (repository *UserRepository) FindOne(queryOptions map[string]interface{}) ( @@ -147,6 +159,15 @@ func (repository *UserRepository) FindOne(queryOptions map[string]interface{}) (
147 return nil, err 159 return nil, err
148 } 160 }
149 } 161 }
  162 + return userModel, nil
  163 + }
  164 + var cacheModel = &domain.User{}
  165 + if _, ok := queryOptions["userId"]; ok {
  166 + cacheModel.UserId = queryOptions["userId"].(int64)
  167 + }
  168 + if err := repository.QueryCache(cacheModel.CacheKeyFunc, userModel, queryFunc); err != nil {
  169 + return nil, err
  170 + }
150 if userModel.UserId == 0 { 171 if userModel.UserId == 0 {
151 return nil, nil 172 return nil, nil
152 } else { 173 } else {
@@ -179,6 +200,7 @@ func NewUserRepository(transactionContext *pgTransaction.TransactionContext) (*U @@ -179,6 +200,7 @@ func NewUserRepository(transactionContext *pgTransaction.TransactionContext) (*U
179 } else { 200 } else {
180 return &UserRepository{ 201 return &UserRepository{
181 transactionContext: transactionContext, 202 transactionContext: transactionContext,
  203 + CachedRepository: cache.NewDefaultCachedRepository(),
182 }, nil 204 }, nil
183 } 205 }
184 } 206 }