[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
}

posted on   进击的davis  阅读(620)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示