前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang 官方推荐使用的 Redis 客户端 redigo

Golang 官方推荐使用的 Redis 客户端 redigo

作者头像
frank.
发布2021-08-13 14:33:14
7.6K0
发布2021-08-13 14:33:14
举报

01

介绍

在之前的文章介绍过 Golang 操作 Redis 的三方库 go-redis,本文主要介绍另外一个 Golang 操作 Redis 的三方库 redigo,它是 Golang 官方推荐使用的 Redis 客户端。

go-redis 三方库为我们封装了很多函数来执行 Redis 命令,而 redigo 三方库只有一个 Do 函数执行 Redis 命令,更接近使用 redis-cli 操作 Redis,这一点是我个人比较喜欢的,只要熟悉 Redis,就可以轻松使用 redigo 作为客户端操作 Redis,而不需要再去记三方库封装的函数。

使用 go get 命令安装 redigo:

代码语言:javascript
复制
go get github.com/gomodule/redigo/redis

redigo 库中的 Conn 接口是操作 Redis 的主要接口。

代码语言:javascript
复制
type Conn interface {
 // Close closes the connection.
 Close() error
 // Err returns a non-nil value when the connection is not usable.
 Err() error
 // Do sends a command to the server and returns the received reply.
 Do(commandName string, args ...interface{}) (reply interface{}, err error)
 // Send writes the command to the client's output buffer.
 Send(commandName string, args ...interface{}) error
 // Flush flushes the output buffer to the Redis server.
 Flush() error
 // Receive receives a single reply from the Redis server
 Receive() (reply interface{}, err error)
}

阅读 redigo 库的源码,我们可以发现 Conn 接口包含 6 个方法,本文我们主要使用 Do 和 Close。

02

创建连接

redigo 库提供了多个函数创建连接,本文我们使用 Dial 函数创建连接,此外,还可以使用 DialURL 函数和 NewConn 函数创建连接,限于篇幅,本文不准备逐一介绍。

示例代码:

代码语言:javascript
复制
// 连接 redis-server
// 创建连接
c, err := redis.Dial("tcp", ":6379")
if err != nil {
  fmt.Printf("redis.Dial() error:%v", err)
  return
}
// 关闭连接
defer c.Close()

阅读上面这段代码,我们使用 Dial 函数创建连接,需要注意的是,我们不要忘记关闭连接。

使用该方式主要是为了读者朋友们容易理解,建议在生产环境中使用连接池,避免每次执行命令都需要先创建连接,影响性能。

03

string 操作

redigo 执行 Redis 命令的通用方法是使用 Conn 接口的 Do 函数,Do 函数可以发送命令给 Redis 服务器,并返回 Redis 服务器的回复。

Do(commandName string, args ...interface{}) (reply interface{}, err error)

示例代码:

代码语言:javascript
复制
func stringSet(conn redis.Conn) {
 replySet, err := conn.Do("SET", "key1", "value1")
 if err != nil {
  fmt.Println("SET error: ", err)
 }
 fmt.Println(replySet)
}

阅读上面这段代码,我们使用 Do 函数执行 Redis 的 set 命令,限于篇幅,更多关于 string 类型的 redis 命令示例代码,请阅读推送到 GitHub 的本文相关代码。

04

复合类型操作

除了操作字符串,我们还会操作复合类型,redigo 库中的 Args 类型提供了操作复合类型的方法 AddFlat。

func (args Args) AddFlat(v interface{}) Args

写操作:

代码语言:javascript
复制
type User struct {
 ID   int64  `redis:"id"`
 Name string `redis:"name"`
}

// struct
func structAdd(conn redis.Conn) {
 u1 := User{
  ID:   1,
  Name: "name1",
 }

 replyStruct, err := conn.Do("HMSET", redis.Args{}.Add("hkey1").AddFlat(&u1)...)
 if err != nil {
  fmt.Println("struct err: ", err)
 }
 fmt.Println(replyStruct)
}

阅读上面这段代码,我们使用 AddFlat 方法将结构体写入 Redis,需要注意的是结构体字段是可导出的字段名称,并且使用了字段标签 redis。

读操作:

代码语言:javascript
复制
func structValues(conn redis.Conn) {
 v, err := redis.Values(conn.Do("HGETALL", "hkey1"))
 if err != nil {
  fmt.Println("redis.Values() err: ", err)
 }

 // redis.ScanStruct()
 u2 := new(User)
 if err := redis.ScanStruct(v, u2); err != nil {
  fmt.Println("redis.ScanStruct() err: ", err)
 }

 fmt.Printf("%+v\n", u2)
}

阅读上面这段代码,我们使用两个助手函数 Values 和 ScanStruct,将 Redis 服务器的回复解析到 struct,redigo 还提供了助手函数 ScanSlice 将 Redis 服务器的回复解析到 slice。

限于篇幅,关于 map 和 slice 的示例代码,请阅读推送到 GitHub 上的本文相关代码。

05

总结

本文我们介绍了 Golang 官方推荐的操作 Redis 的三方库 redigo,它仅需使用 Do 函数执行 Redis 所有命令,它还提供了很多助手函数帮助我们更加方便操作 Redis。如果读者朋友们对 redigo 感兴趣,建议花时间阅读一遍 redigo 的文档。关于 redigo 更多示例代码,请阅读文章相关代码。

文章相关代码,请点击「阅读原文」

推荐阅读:

Golang 语言中 map 有哪些陷阱?

Golang 语言是面向对象编程风格的编程语言吗?

Golang 语言中 kafka 客户端库 sarama

Golang 语言中的非类型安全指针

Golang 语言怎么使用 panic 函数?

参考资料: https://github.com/gomodule/redigo https://pkg.go.dev/github.com/gomodule/redigo/redis https://redis.io/commands

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Go语言开发栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档