前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redigo--用池管理redis连接

Redigo--用池管理redis连接

作者头像
李海彬
发布2018-03-23 16:46:52
2.4K0
发布2018-03-23 16:46:52
举报
文章被收录于专栏:Golang语言社区

在golang的项目中,若要频繁的用redis(或者其他类似的NoSQL)来存取数据,最好用redigo自带的池来管理连接。

不然的话,每当要操作redis时,建立连接,用完后再关闭,会导致大量的连接处于TIME_WAIT状态(redis连接本质上就是tcp)。

注:TIME_WAIT,也叫TCP半连接状态,会继续占用本地端口。

以下为redis连接池的golang实现:

代码语言:javascript
复制
import (  
    "github.com/garyburd/redigo/redis"  
    "github.com/astaxie/beego"  
    "time"  
)  
 
var (  
    // 定义常量  
    RedisClient     *redis.Pool  
    REDIS_HOST string  
    REDIS_DB   int  
)  
 
func init() {  
    // 从配置文件获取redis的ip以及db  
    REDIS_HOST = beego.AppConfig.String("redis.host")  
    REDIS_DB, _ = beego.AppConfig.Int("redis.db")  
    // 建立连接池  
    RedisClient = &redis.Pool{  
        // 从配置文件获取maxidle以及maxactive,取不到则用后面的默认值  
        MaxIdle:     beego.AppConfig.DefaultInt("redis.maxidle", 1),  
        MaxActive:   beego.AppConfig.DefaultInt("redis.maxactive", 10),  
        IdleTimeout: 180 * time.Second,  
        Dial: func() (redis.Conn, error) {  
            c, err := redis.Dial("tcp", REDIS_HOST)  
            if err != nil {  
                return nil, err  
            }  
            // 选择db  
            c.Do("SELECT", REDIS_DB)  
            return c, nil  
        },  
    }  
}  

其中,各参数的解释如下:

MaxIdle:最大的空闲连接数,表示即使没有redis连接时依然可以保持N个空闲的连接,而不被清除,随时处于待命状态。

MaxActive:最大的激活连接数,表示同时最多有N个连接

IdleTimeout:最大的空闲连接等待时间,超过此时间后,空闲连接将被关闭

Dial:建立连接

使用连接池时的代码:

代码语言:javascript
复制
// 从池里获取连接  
rc := RedisClient.Get()  
// 用完后将连接放回连接池  
defer rc.Close()  

以上就是连接池的用法了,很简单吧。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档