实现redis连接池以及管道

使用Pool结构建立连接池

初始化连接池

pool := &redis.pool{
	MaxIdle:	16,
	MaxActive:	1024,
	IdleTimeout:	300,
	Dial:	func() (redis.Conn,error) {
		return redis.Dial("tcp","localhost:6379")
	},
}
  • MaxIdle:最大的空闲连接数,表示即使redis没有被使用时,依然可以保持16个空闲的连接,随时处于待命状态。
  • MaxActive: 最大的激活链接数,表示同时最多有1024个连接。
  • IdleTimeout: 最大的空闲连接等待时间,超过这个时间空闲连接将被关闭。

调用Do方法老设置和获取字符串

func main() {
	c := pool.Get()
	defer c.Close()
	
	_,err := c.Do("Set","username","jack")
	if err != nil {
		fmt.Println("Set Failed,err:",err)
		return
	}
	r,err := redis.String(c.Do("Get","username"))
	if err != nil {
		fmt.Println("Get failed",err)
		return
	}
	fmt.Println(r)
}

Redis实现管道操作

Send(),Flansh(),Receive()方法支持管道化操作。Send()方法用于向连接的输出缓冲中写入命令。Flash()方法用于将连接的输出缓冲清空并写入服务器端。Receive()方法用于按照FIFO顺序依次读取服务端的响应。

package main

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

func main() {
	c,err := redis.Dial("tcp","localhost:6379")
	if err != nil {
		fmt.Println("conn failed,err: ",err)
		return
	}
	defer c.Close()

	c.Send("SET","username1","tom")
	c.Send("SET","username2","李某人")
	c.Flush()

	v,err := c.Receive()
	fmt.Printf("v:%v,err:%v\n",v,err)
	v,err = c.Receive()
	fmt.Printf("v:%v,err:%v\n",v,err)

	v,err = c.Receive()  //一直等待
	fmt.Printf("v:%v,err:%v\n",v,err)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smile_new

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值