| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- package cache
- import (
- "dsbqj-admin/pkg/logger"
- "dsbqj-admin/pkg/util"
- "github.com/go-redis/redis"
- "os"
- "strconv"
- "sync/atomic"
- "time"
- )
- // RedisClient Redis缓存客户端单例
- var RedisReport *redis.Client
- var num int32 = 0
- // Redis 在中间件中初始化redis链接
- func Redis() {
- RedisReportInit()
- startListen()
- }
- func startListen() {
- ListenRedis("redis_report", RedisReport, RedisReportInit)
- }
- func RedisReportInit() {
- db, _ := strconv.ParseUint(os.Getenv("REDIS_DB"), 10, 64)
- client := redis.NewClient(&redis.Options{
- Addr: os.Getenv("REDIS_ADDR"),
- Password: os.Getenv("REDIS_PW"),
- DB: int(db),
- })
- _, err := client.Ping().Result()
- if err != nil {
- if num == 0 {
- panic("redis connect err")
- }
- return
- }
- logger.Info("redis 数据库连接成功 第%d次连接", num)
- RedisReport = client
- }
- func ListenRedis(mark string, rd *redis.Client, connect func()) {
- util.StartMinorGO("redis connect", func() {
- for {
- time.Sleep(5 * time.Second)
- _, err := rd.Ping().Result()
- if err != nil {
- num = atomic.AddInt32(&num, 1)
- logger.Info("%s---> redis client reconnect num: %d", mark, num)
- connect()
- }
- }
- }, func(isdebug bool) {})
- }
|