文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-03 00:27

关注

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

使用 go get 命令安装 redigo:

  1. go get github.com/gomodule/redigo/redis 

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

  1. type Conn interface { 
  2.  // Close closes the connection
  3.  Close() error 
  4.  // Err returns a non-nil value when the connection is not usable. 
  5.  Err() error 
  6.  // Do sends a command to the server and returns the received reply. 
  7.  Do(commandName string, args ...interface{}) (reply interface{}, err error) 
  8.  // Send writes the command to the client's output buffer. 
  9.  Send(commandName string, args ...interface{}) error 
  10.  // Flush flushes the output buffer to the Redis server. 
  11.  Flush() error 
  12.  // Receive receives a single reply from the Redis server 
  13.  Receive() (reply interface{}, err error) 

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

02创建连接

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

示例代码:

  1. // 连接 redis-server 
  2. // 创建连接 
  3. c, err := redis.Dial("tcp"":6379"
  4. if err != nil { 
  5.   fmt.Printf("redis.Dial() error:%v", err) 
  6.   return 
  7. // 关闭连接 
  8. defer c.Close() 

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

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

03string 操作

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

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

示例代码:

  1. func stringSet(conn redis.Conn) { 
  2.  replySet, err := conn.Do("SET""key1""value1"
  3.  if err != nil { 
  4.   fmt.Println("SET error: ", err) 
  5.  } 
  6.  fmt.Println(replySet) 

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

04复合类型操作

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

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

写操作:

  1. type User struct { 
  2.  ID   int64  `redis:"id"
  3.  Name string `redis:"name"
  4.  
  5. // struct 
  6. func structAdd(conn redis.Conn) { 
  7.  u1 := User
  8.   ID:   1, 
  9.   Name"name1"
  10.  } 
  11.  
  12.  replyStruct, err := conn.Do("HMSET", redis.Args{}.Add("hkey1").AddFlat(&u1)...) 
  13.  if err != nil { 
  14.   fmt.Println("struct err: ", err) 
  15.  } 
  16.  fmt.Println(replyStruct) 

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

读操作:

  1. func structValues(conn redis.Conn) { 
  2.  v, err := redis.Values(conn.Do("HGETALL""hkey1")) 
  3.  if err != nil { 
  4.   fmt.Println("redis.Values() err: ", err) 
  5.  } 
  6.  
  7.  // redis.ScanStruct() 
  8.  u2 := new(User
  9.  if err := redis.ScanStruct(v, u2); err != nil { 
  10.   fmt.Println("redis.ScanStruct() err: ", err) 
  11.  } 
  12.  
  13.  fmt.Printf("%+v\n", u2) 

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

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

05总结

本文我们介绍了 Golang 官方推荐的操作 Redis 的三方库 redigo,它仅需使用 Do 函数执行 Redis 所有命令,它还提供了很多助手函数帮助我们更加方便操作 Redis。

本文转载自微信公众号「Golang语言开发栈」,可以通过以下二维码关注。转载本文请联系Golang语言开发栈公众号。

 

来源:Golang语言开发栈内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯