zoukankan      html  css  js  c++  java
  • 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()
    }()
        
    

      

  • 相关阅读:
    A JavaScript Tree component which implements the J.Q.Walker II layout algorithm
    决策树Ecotree(转)
    Elasticsearch中关于transform的一个问题分析
    转发sqlserver http://www.cnblogs.com/jiazengtao/archive/2013/05/29/3102803.html
    时间GMT
    C#去掉json字符串中的换行符
    收藏的好的Jquery+css3
    存储过程中日期的转换
    关于头文件
    关于头文件
  • 原文地址:https://www.cnblogs.com/sunlong88/p/13389712.html
Copyright © 2011-2022 走看看