之前一篇文章介绍过使用redigo连接redis数据库处理,在使用中发现如果初始化一条链接连接redis做相关操作,使用中发现当两个程序交替使用redis时,先前建立的链接会断掉,只能每次操作的时候重新建立链接,使用后关闭。后来发现redigo有一个连接池的功能,所以改用链接池处理

先介绍下链接池的结构

type Pool struct {
//Dial 是创建链接的方法
Dial func() (Conn, error) //TestOnBorrow 是一个测试链接可用性的方法
TestOnBorrow func(c Conn, t time.Time) error // 最大的空闲连接数,表示即使没有redis连接时依然可以保持N个空闲的连接,而不被清除,随时处于待命状态
MaxIdle int // 最大的激活连接数,表示同时最多有N个连接 ,为0事表示没有限制
MaxActive int //最大的空闲连接等待时间,超过此时间后,空闲连接将被关闭
IdleTimeout time.Duration // 当链接数达到最大后是否阻塞,如果不的话,达到最大后返回错误
Wait bool }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

使用方法可以看下边的例子

package main

import (
"flag"
"fmt"
"github.com/garyburd/redigo/redis"
"time"
)
//声明一些全局变量
var (
pool *redis.Pool
redisServer = flag.String("redisServer", ":6379", "")
redisPassword = flag.String("redisPassword", "123456", "")
)
//初始化一个pool
func newPool(server, password string) *redis.Pool {
return &redis.Pool{
MaxIdle: 3,
MaxActive: 5,
IdleTimeout: 240 * time.Second,
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", server)
if err != nil {
return nil, err
}
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 {
if time.Since(t) < time.Minute {
return nil
}
_, err := c.Do("PING")
return err
},
}
} func main() {
flag.Parse()
pool = newPool(*redisServer, *redisPassword) conn := pool.Get()
defer conn.Close()
//redis操作
v, err := conn.Do("SET", "pool", "test")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(v)
v, err = redis.String(conn.Do("GET", "pool"))
if err != nil {
fmt.Println(err)
return
}
fmt.Println(v) }

方便使用也同样做了一个封装

最新文章

  1. Spring 下默认事务机制中@Transactional 无效的原因
  2. .NET WebAPI 实现图片上传(包括附带参数上传图片)
  3. 简单的jQuery 四级分类实用插件
  4. nginx跨域处理
  5. mysql 执行流程
  6. STL之set、multiset、functor&amp;pair使用方法
  7. 建立一个ROS msg and srv
  8. SICP 习题 (1.13) 解题总结
  9. Flex 数据绑定
  10. git使用教程及github远程仓库管理
  11. Tomcat知识1
  12. Servlet编程实例2
  13. Netty 拆包粘包和服务启动流程分析
  14. 11_Python的列表推导式_Python编程之路
  15. ActiveMQ在Windows下的安装与启动(懒人专属)
  16. Loadrunner使用键盘快捷键
  17. 超炫jQuery测试答题功能
  18. 高可用Mysql架构_Haproxy+keepalived+mycat集群的配置
  19. day 12 文件操作
  20. svm和svr区别--摘自其它博客

热门文章

  1. Android studio Github 断开连接
  2. 通俗理解 模糊自适应PID
  3. postman使用--发送请求
  4. 第1节 flume:7、flume的监控文件夹,实现数据收集到hdfs上
  5. sqlserver生成脚本
  6. Openjudge-4110-圣诞老人的礼物
  7. Oracle数据库日常SQL的使用
  8. 实现验证的vsftpd虚拟用户
  9. vue 框架原理
  10. 如何用纯 CSS 创作一个同心圆弧旋转 loader 特效