【提问帖】GO中调用redis时,当并发量比较大时出现的问题。

GO中调用redis时,实始化一个连接池,做法也是一般的用户:
&redis.Pool{
    MaxIdle:     beego.AppConfig.DefaultInt("redis::maxidle", 1),
    MaxActive:   beego.AppConfig.DefaultInt("redis::maxactive", 10),
    IdleTimeout: time.Duration(beego.AppConfig.DefaultInt64("redis::idle_time_out", 180)) * time.Second,
    Dial: func() (redis.Conn, error) {
        log.Println("func dial REDIS_HOST:" + REDIS_HOST)
        c, err := redis.Dial("tcp", REDIS_HOST)
        if err != nil {
            log.Println("dial error:", err)
            return nil, err
        }
        // 选择db
        c.Do("SELECT", REDIS_DB)
        return c, nil
    },
}
类似于以上,MaxActive曾调为100,或几K,大小,当一秒请求数据量,达到5000次以上时,每一次都调用:
func GetValue(UID int) (value map[string]string, err error) {
    // 获取连接
    rs := RedisClient.Get()
    defer rs.Close()
    value, err = redis.StringMap(rs.Do("HGETALL", "xxxxx:"+strconv.Itoa(UID)))
    if err != nil {
        log.Println(err)
    }
    return value, err
}

这样的一个接口时,会导致CPU达到100%以上,同时出现redigo: connection pool exhausted这样的错误,发现是不断地调用Dial: func() (redis.Conn, error),他不是有连接池吧为什么要不断地调用DIAL?,一般这样大量数据请求时,做法如何?

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2017-06-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一个会写诗的程序员的博客

使用 WebStorm 创建 React App构建通用的 React 和 Node 应用

译者的话:这是一篇非常优秀的 React 教程,该文对 React 组件、React Router 以及 Node 做了很好的梳理。

2611
来自专栏游戏杂谈

测试用户的网络环境

这个其实是一个hta文件,目的是测试用户本机请求资源、hosts文件、当前所处的位置。参考stone的checknetwork4qqfarm: http://c...

2731
来自专栏菩提树下的杨过

如何对动态创建控件进行验证以及在Ajax环境中的使用

首先给一个常规的动态创建控件,并进行验证的代码 [前端aspx代码] <%@ Page Language="C#" AutoEventWireup="true"...

2045
来自专栏一个爱瞎折腾的程序猿

dotnet使用Selenium执行自动化任务

源码地址:https://coding.net/u/yimocoding/p/WeDemo/git/tree/SeleniumDemo/SeleniumDemo

1281
来自专栏Golang语言社区

Golang 通过 smtp 发送邮件

package main import( "fmt" "net/smtp" "encoding/base64" ) //html,plain func Send...

3636
来自专栏Golang语言社区

使用Go开发一个简单的服务器程序

最近有个小项目,需要一个简单的后台程序来支撑,本来想用Nodejs来做,但是由于本人js一直很菜,并且很讨厌callback,虽然我也很喜欢异步模型,但我一直都...

3636
来自专栏iOS122-移动混合开发研究院

简陋的swift carthage copy-frameworks 辅助脚本

在看 carthage 时,其中需要配置一个 copy-frameworks 脚本,此脚本特殊的地方,需要手动填写 Input Files 和 Output F...

3086
来自专栏岑志军的专栏

ReactNative-综合案例(02)

1797
来自专栏偏前端工程师的驿站

WPF一步一脚印系列(1):万事起头难

  一直从事Asp.Net的开发,而C/S的开发方面简直是一片空白,于是从上星期开始就痛下决心开始学习WPF。我采取的策略是网上看基础资料+做简单的demo练习...

2489
来自专栏Golang语言社区

使用Go开发一个简单的服务器程序

最近有个小项目,需要一个简单的后台程序来支撑,本来想用Nodejs来做,但是由于本人js一直很菜,并且很讨厌callback,虽然我也很喜欢异步模型,但我一直都...

3008

扫码关注云+社区

领取腾讯云代金券