[go-每日一库] golang redigo的redis连接池的实现
1.介绍
go-redis 三方库为我们封装了很多函数来执行 Redis 命令,而 redigo 三方库只有一个 Do 函数执行 Redis 命令,更接近使用 redis-cli 操作 Redis,这一点是我个人比较喜欢的,只要熟悉 Redis,就可以轻松使用 redigo 作为客户端操作 Redis,而不需要再去记三方库封装的函数。
2.连接池的简单实现
代码结构
. +--- go.mod +--- go.sum +--- main.go +--- pool | +--- redis-pool.go
redis-pool
package pool import ( "fmt" "github.com/garyburd/redigo/redis" "log" ) var ( pool *redis.Pool ) func init() { pool = &redis.Pool{ MaxIdle: 10, MaxActive: 5, IdleTimeout: 100, Dial: dialFunc, } client := pool.Get() res, err := redis.String(client.Do("ping")) if err != nil { fmt.Println(err) } fmt.Println("init result:", res) } func dialFunc() (redis.Conn, error) { conn, err := redis.Dial("tcp", "localhost:6370") if err != nil { log.Fatal(err.Error()) } return conn, nil } func GetRDB() redis.Conn { return pool.Get() }
main
package main import ( "fmt" "github.com/garyburd/redigo/redis" "go-reids-pool/pool" ) func main() { rdb := pool.GetRDB() if rdb == nil { fmt.Errorf("rdb is nil") } name := "zhangsan" key := "name:zhangsan" _, err := rdb.Do("set", key, name) // 操作如同redis-cli if err != nil { fmt.Println(err) } result , err := redis.String(rdb.Do("get", key)) // 获取结果 if err != nil { fmt.Println(err) } fmt.Println("cache key: name:zhangsan, value:", result) // zhangsan }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?