go使用redis连接池技术操作redis数据库实例

我们都知道,在程序开发中,网络链接的开销是比较大的, 当我们在链接redis 时,如果是操作一次就执行一次DIal拨号,那性能是很低的,redis的效率瞬间就被你降低了50%, 提速redis使用性能的第一步就是使用连接池技术,废话不多说,直接上代码:

Go 复制代码
package main

import (
	"fmt"

	"github.com/gomodule/redigo/redis"
)

// 定义全局变量
var pool *redis.Pool

// 当程序启动时就初始化这个函数,在main之前执行
func init() {
	pool = &redis.Pool{
		MaxIdle:     8,   //最大空闲链接数
		MaxActive:   0,   // 表示和数据库的最大链接数,0表示没有限制
		IdleTimeout: 100, //最大空闲时间
		Dial: func() (redis.Conn, error) { //从连接池中取出一个链接
			return redis.Dial("tcp", "localhost:6378")
		},
	}
}

func RedisDo(commandName string, args ...interface{}) (reply interface{}, err error) {
	// 普通方式链接redis,这个效率太低,因为每次都要取拨号链接 网络开销太大
	// conn, err := redis.Dial("tcp", "localhost:6378")
	// if err != nil {
	// 	fmt.Printf("Redis Connect Error: %v", err)
	// }

	conn := pool.Get() // 从连接池中获取一个redis链接

	defer conn.Close() // 用完关闭,
	// 这里的参数可变参数 args 在再次调用的时候需要使用...进行解构,否则这个参数的类型就改变了
	reply, err = conn.Do(commandName, args...)
	if err != nil {
		fmt.Printf("Redis命令 set失败: %v", err)
	}
	return
}
func main() {
	RedisDo("set", "name2", "Tekin from golang")
	if rep, err := RedisDo("get", "name2"); err == nil {
		str, _ := redis.String(rep, err)
		fmt.Printf("str=%v", str)
	} else {
		fmt.Println(err)
	}
}
相关推荐
掘金安东尼4 分钟前
深入 Neo4j:从图数据库原理到企业知识引擎的实践指南
数据库·neo4j
Mr_hwt_1235 分钟前
spring boot框架中本地缓存@Cacheable原理与踩坑点详细解析
java·spring boot·后端·缓存
TiAmo zhang8 分钟前
SQL Server 2019实验 │ 管理SQL Server的安全性
数据库·sqlserver
DokiDoki之父11 分钟前
数据库—数据库设计 & 多表查询 & 事务
数据库·sql
❀͜͡傀儡师11 分钟前
OpenResty + Lua + Redis 鉴权案例,适用于 x86 和 ARM 架构的 Docker 环境。
redis·lua·openresty
武子康1 小时前
Java-151 深入浅出 MongoDB 索引详解 性能优化:慢查询分析 索引调优 快速定位并解决慢查询
java·开发语言·数据库·sql·mongodb·性能优化·nosql
Knight_AL2 小时前
Redis 限流解决方案:结合 Lua 脚本、AOP 和自定义注解的实现
redis·spring
Mr Aokey2 小时前
解决Redis数据丢失难题:深入理解RDB与AOF持久化机制
数据库·redis·缓存
xxxxxxllllllshi3 小时前
Cookie、Session、JWT、SSO,网站与 APP 登录持久化与缓存
java·开发语言·jvm·数据结构·缓存·面试
KaiwuDB3 小时前
深度剖析:KWDB SQL 编译与优化策略
数据库