Redis教程

Golang 对 Redis 链接池操作

本文主要是介绍Golang 对 Redis 链接池操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一 点睛

通过 Golang 对 Redis 操作, 可以通过 Redis 链接池来提升性能,流程如下。

1 事先初始化一定数量的链接,放入到链接池。

2 当 Go 需要操作 Redis 时, 直接从 Redis  链接池取出链接即可。

3 这样可以节省临时获取 Redis  链接的时间,从而提高性能。

二 图解

三 代码

package main

import (
   "fmt"
   "github.com/garyburd/redigo/redis"
)

// 定义一个全局的pool
var pool *redis.Pool

// 当启动程序时,就初始化连接池
func init() {
   pool = &redis.Pool{
      MaxIdle:     8,   // 最大空闲链接数
      MaxActive:   0,   // 表示和数据库的最大链接数, 0 表示没有限制
      IdleTimeout: 100, // 最大空闲时间
      Dial: func() (redis.Conn, error) { // 初始化链接的代码, 链接哪个 ip 的 redis
         return redis.Dial("tcp", "localhost:6379")
      },
   }
}


func main() {
   // 先从 pool 取出一个链接
   conn := pool.Get()
   defer conn.Close()
   _, err := conn.Do("Set", "name", "汤姆猫~~")
   if err != nil {
      fmt.Println("conn.Do err=", err)
      return
   }
   // 取出
   r, err := redis.String(conn.Do("Get", "name"))
   if err != nil {
      fmt.Println("conn.Do err=", err)
      return
   }
   fmt.Println("r=", r)
   // 如果要从 pool 取出链接,一定保证链接池是没有关闭
   // pool.Close()
   conn2 := pool.Get()
   _, err = conn2.Do("Set", "name2", "汤姆猫~~2")
   if err != nil {
      fmt.Println("conn.Do err~~~~=", err)
      return
   }
   // 取出
   r2, err := redis.String(conn2.Do("Get", "name2"))
   if err != nil {
      fmt.Println("conn.Do err=", err)
      return
   }
   fmt.Println("r=", r2)
}

四 测试

r= 汤姆猫~~

r= 汤姆猫~~2

 

这篇关于Golang 对 Redis 链接池操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!