• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
孙龙 程序员
少时总觉为人易,华年方知立业难
博客园    首页    新随笔    联系   管理    订阅  订阅
golang redis连接池实现
golang redis连接池实现

配置文件:redis_config.ini

[default_redis_read]
host = 192.168.1.xxx:6379
password = xxxxx
max_idle = 50
max_active = 100
idle_timeout = 20

[default_redis_write]
host = 192.168.1.235:6379
password = xxx
max_idle = 50
max_active = 100
idle_timeout = 20


[api_redis]
host = 192.168.1.235:6379
password = xxx
max_idle = 50
max_active = 100
idle_timeout = 20

 

自定义多个redis链接

package config

type RedisDatabase struct {
    Password    string
    Host        string
    Database    string
    MaxIdle string
    MaxActive string
    MaxAIdleTimeoutctive string
    Prefix      string
}

//多数据库配置
func BuildRedisConfgs() (RedisDatabaseMap map[string]RedisDatabase) {
    return map[string]RedisDatabase{
        "search_r": {
            Host: Get("default_redis_read.host").String(),
            Password: Get("default_redis_read.password").String(),
            MaxIdle: Get("default_redis_read.max_idle").String(),
            MaxActive: Get("default_redis_read.max_active").String(),
        },
        "search_w": {
            Host: Get("default_redis_write.host").String(),
            Password: Get("default_redis_write.password").String(),
            MaxIdle: Get("default_redis_read.max_idle").String(),
            MaxActive: Get("default_redis_read.max_active").String(),
        },
        "api_redis": {
            Host: Get("api_redis.host").String(),
            Password: Get("api_redis.password").String(),
            MaxIdle: Get("api_redis.max_idle").String(),
            MaxActive: Get("api_redis.max_active").String(),
        },
    }
}

 

redis连接池实现:

package gredis

import (
    "github.com/gomodule/redigo/redis"
    "search_server/pkg/config"
    "time"
)


type ichuntRedis struct {
    RedisList map[string]*redis.Pool
}

var ichuntRedis_ = &ichuntRedis{}

func Conn(connection string) (redis.Conn){

    return ichuntRedis_.RedisList[connection].Get()
}

var writeConn, readConn *redis.Pool

func Setup() (err error) {
    ichuntRedis_.RedisList = make(map[string]*redis.Pool,0)
    RedisDatabaseMap := config.BuildRedisConfgs()
    for redisKey,redisConfig := range RedisDatabaseMap{
        ichuntRedis_.RedisList[redisKey],err = getConn(redisConfig.Host, redisConfig.Password)
        if err != nil{
            panic(err)
        }
    }
    return nil
}

//格式化成字符串
func String( a interface{},err error) (string,error) {
    return redis.String(a,err)
}

func getConn(writeHost, password string) (pool *redis.Pool, err error) {
    maxIdle, _ := config.Get("redis.max_idle").Int()
    maxActive, _ := config.Get("redis.max_active").Int()
    pool = &redis.Pool{
        MaxIdle:   maxIdle,
        MaxActive: maxActive,
        Dial: func() (redis.Conn, error) {
            c, err := redis.Dial("tcp", writeHost)
            if err != nil {
                return nil, err
            }
            if password != "" {
                if _, err := c.Do("AUTH", password); err != nil {
                    c.Close()
                    return nil, err
                }
            }
            return c, err
        },
        TestOnBorrow: func(c redis.Conn, t time.Time) error {
            _, err := c.Do("PING")
            return err
        },
    }
    return
}

 

 

调用方式:

redisConn :=gredis.Conn("search_r")
defer func(){
	redisConn.Close()
}()
    

  

 

本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/p/13389712.html

posted on 2020-07-28 10:36  孙龙-程序员  阅读(2136)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3