zoukankan      html  css  js  c++  java
  • Redis连接池的介绍和原理

    Redis连接池

    说明:通过Golang对Redis进行操作,还可以通过Redis连接池,流程如下
    1)事先初始化一定数量的连接,放入连接池中;
    2)当需要操作Redis时,直接从Redis连接池中取出连接即可;
    3)这样可以节省临时获取Redis连接的时间,从而提高效率

    核心代码

    var pool *redis.Pool = &redis.Pool{
          MaxIdle: 8, // 最大空闲连接数
          MaxActive: 0, // 最大连接数,0表示没有限制
          IdleTimeout: 100, // 空闲超时时间
          Dial: func()(redis.Conn, error){ // 初始化连接
                return redis.Dial("tcp", "localhost:6379")
          },
    }
    c := pool.Get() // 从连接池中取出一个连接
    pool.Close() // 关闭连接池,之后不能再取出连接
    

    演示

    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){ // 初始化连接
    			  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
    	}
    	// 取出
    	res, err := redis.String(conn.Do("Get", "name"))
    	if err!=nil{
    		fmt.Println("conn get err:", err)
    		return
    	}
    	fmt.Println("res =", res)
    }
    

    结果

  • 相关阅读:
    angularJS实现无刷新文件下载
    入门程序,hello world
    rabbitMQ概念详细介绍
    rabbitMQ安装
    truncate与delete的区别
    Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
    Java多线程编程:Callable、Future和FutureTask浅析
    定时任务 Crontab命令 详解
    使用Spring Session做分布式会话管理
    AngularJS ui-router (嵌套路由)
  • 原文地址:https://www.cnblogs.com/pangqianjin/p/14406706.html
Copyright © 2011-2022 走看看