Browse Source

增加redis 缓存

liuyong_awesome 4 years ago
parent
commit
5a78aa733d
5 changed files with 121 additions and 17 deletions
  1. 7 1
      config/config.yaml.bak
  2. 11 1
      dao/category.go
  3. 7 6
      dao/channel.go
  4. 43 0
      lib/redis.go
  5. 53 9
      main.go

+ 7 - 1
config/config.yaml.bak

@@ -3,4 +3,10 @@ db_host:
 db_port:
 db_username:
 db_password:
-db_database: bids
+db_database: bids
+#[addr 服务端监听接口]
+addr: :8972
+#[redis 相关配置]
+redis_host: 192.168.202.110
+redis_port: 6379
+redis_password:

+ 11 - 1
dao/category.go

@@ -7,7 +7,7 @@ import (
 )
 
 type SemCategory struct {
-	DeletedAt    time.Time      `gorm:"column:deleted_at" json:"deleted_at" db:"deleted_at"`
+	DeletedAt    sql.NullTime   `gorm:"column:deleted_at" json:"deleted_at" db:"deleted_at"`
 	Factor       float64        `gorm:"column:factor" json:"factor" db:"factor"`
 	End          sql.NullString `gorm:"column:end" json:"end" db:"end"`
 	UpdatedAt    time.Time      `gorm:"column:updated_at" json:"updated_at" db:"updated_at"`
@@ -20,6 +20,16 @@ type SemCategory struct {
 	CategoryName string         `gorm:"column:category_name" json:"category_name" db:"category_name"`
 }
 
+//func (s SemCategory)MarshalJSON()([]byte, error)  {
+//	type Alias SemCategory
+//	return json.Marshal(&struct {
+//		Alias
+//		CreatedAt string `json:"create_time"`
+//	}{
+//		Alias:      (Alias)(s),
+//		CreatedAt: s.CreatedAt.Format("2006/01/02 15:04:05"),
+//	})
+//}
 // TableName sets the insert table name for this struct type
 func (s *SemCategory) TableName() string {
 	return "sem_category"

+ 7 - 6
dao/channel.go

@@ -1,17 +1,18 @@
 package dao
 
 import (
+	"database/sql"
 	"gitdxz.51daxuetong.cn/go_dev/bids_rpcx/lib"
 	"time"
 )
 
 type SemChannel struct {
-	CreatedAt   time.Time `gorm:"column:created_at" json:"created_at" db:"created_at"`
-	UpdatedAt   time.Time `gorm:"column:updated_at" json:"updated_at" db:"updated_at"`
-	DeletedAt   time.Time `gorm:"column:deleted_at" json:"deleted_at" db:"deleted_at"`
-	ID          int       `gorm:"column:id;primary_key" json:"id" db:"id"`
-	ChannelName string    `gorm:"column:channel_name" json:"channel_name" db:"channel_name"`
-	Status      int       `gorm:"column:status" json:"status" db:"status"`
+	CreatedAt   time.Time    `gorm:"column:created_at" json:"created_at" db:"created_at"`
+	UpdatedAt   sql.NullTime `gorm:"column:updated_at" json:"updated_at" db:"updated_at"`
+	DeletedAt   sql.NullTime `gorm:"column:deleted_at" json:"deleted_at" db:"deleted_at"`
+	ID          int          `gorm:"column:id;primary_key" json:"id" db:"id"`
+	ChannelName string       `gorm:"column:channel_name" json:"channel_name" db:"channel_name"`
+	Status      int          `gorm:"column:status" json:"status" db:"status"`
 }
 
 // TableName sets the insert table name for this struct type

+ 43 - 0
lib/redis.go

@@ -0,0 +1,43 @@
+package lib
+
+import (
+	"context"
+	"gitdxz.51daxuetong.cn/go_dev/bids_rpcx/config"
+	"github.com/go-redis/redis/v8"
+	"sync"
+	"time"
+)
+
+var Redis *redis.Client
+var redisSyncOne sync.Once
+
+func GetRedisClient() (*redis.Client, error) {
+	redisSyncOne.Do(func() {
+		redisObj, err := GetNewRedisClient()
+		if err != nil {
+			return
+		}
+		Redis = redisObj
+	})
+	err := Redis.Ping(context.Background()).Err()
+	if err != nil {
+		time.Sleep(10 * time.Second)
+		Redis, err := GetNewRedisClient()
+		return Redis, err
+	}
+	return Redis, err
+}
+
+func GetNewRedisClient() (*redis.Client, error) {
+	cc := config.GetConfig()
+	rHost := cc.String("redis_host")
+	rPort := cc.String("redis_port")
+	rPwd := cc.String("redis_password")
+	redisObj := redis.NewClient(&redis.Options{
+		Addr:     rHost + ":" + rPort,
+		Password: rPwd, // no password set
+		DB:       0,    // use default DB
+	})
+	err := redisObj.Ping(context.Background()).Err()
+	return redisObj, err
+}

+ 53 - 9
main.go

@@ -1,25 +1,69 @@
 package main
 
 import (
-	"flag"
+	"context"
+	"encoding/json"
+	"fmt"
 	"gitdxz.51daxuetong.cn/go_dev/bids_rpcx/config"
+	"gitdxz.51daxuetong.cn/go_dev/bids_rpcx/lib"
 	"gitdxz.51daxuetong.cn/go_dev/bids_rpcx/service"
 	"github.com/smallnest/rpcx/server"
-)
-
-var (
-	addr = flag.String("addr", "127.0.0.1:8972", "server address")
+	"time"
 )
 
 func main() {
-	flag.Parse()
+
 	config.Init()
-	//fmt.Println(config.GetConfig().All())
 	s := server.NewServer()
 	s.Register(new(service.BidsSvc), "")
-	//s.Register(new(Bids), "")
-	err := s.Serve("tcp", *addr)
+	add := config.GetConfig().String("addr")
+	fmt.Println("监听地址:" + add)
+	go func() {
+		for {
+			refreshSemCate()
+			refreshSemChan()
+			<-time.After(5 * time.Minute)
+		}
+	}()
+	err := s.Serve("tcp", add)
 	if err != nil {
 		panic(err)
 	}
 }
+
+func refreshSemCate() {
+	redis, err := lib.GetRedisClient()
+	if err != nil {
+		time.Sleep(10 * time.Second)
+		redis, err = lib.GetNewRedisClient()
+		if err != nil {
+			panic(err)
+		}
+	}
+	bids := service.Bids{}
+	semCate, err := bids.GetSemCategory()
+	if err == nil {
+		if len(semCate) > 0 {
+			val, err := json.Marshal(semCate)
+			if err == nil {
+				redis.Set(context.Background(), "semCategoryList", val, 0)
+			}
+		}
+	}
+}
+func refreshSemChan() {
+	redis, err := lib.GetRedisClient()
+	if err != nil {
+		panic(err)
+	}
+	bids := service.Bids{}
+	semChan, err := bids.GetSemChan()
+	if err == nil {
+		if len(semChan) > 0 {
+			val, err := json.Marshal(semChan)
+			if err == nil {
+				redis.Set(context.Background(), "semChanList", val, 0)
+			}
+		}
+	}
+}