redis 开源go插件
go-redis : https://juejin.cn/post/7027347979065360392
redigo : https://github.com/gomodule/redigo

安装依赖包

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

Go连接Redis

go-redis包自带了连接池,会自动维护redis连接,因此创建一次client即可,不要查询一次redis就关闭client。

  1. import "github.com/gomodule/redigo/redis" // 引入 redis 包

基础功能体验

string

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/gomodule/redigo/redis" // 引入 redis 包
  5. )
  6. func main() {
  7. // 通过 go 向 redis 读写数据
  8. // 1. 连接到 redis
  9. conn, err := redis.Dial("tcp", "localhost:6379")
  10. if err != nil {
  11. fmt.Println("redis连接失败")
  12. return
  13. }
  14. fmt.Println("redis 连接成功")
  15. defer conn.Close()
  16. // 2. 通过go向redis写入数据
  17. _, err = conn.Do("Set", "name", "tom猫猫")
  18. if err != nil {
  19. fmt.Println("set 出错了")
  20. }
  21. // 3. 取数据
  22. r, err := redis.String(conn.Do("Get", "name"))
  23. if err != nil {
  24. fmt.Println("get 出错了")
  25. return
  26. }
  27. // 返回的 r 是interface{}, 需要类型断言
  28. fmt.Printf("v 类型: %T, 值: %v \n", r, r)
  29. }

hash

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/gomodule/redigo/redis"
  5. )
  6. func main() {
  7. // 通过 go 向 redis 读写数据
  8. // 1. 连接到 redis
  9. conn, err := redis.Dial("tcp", "localhost:6379")
  10. if err != nil {
  11. fmt.Println("redis连接失败")
  12. return
  13. }
  14. fmt.Println("redis 连接成功")
  15. defer conn.Close()
  16. // hash 单个读取
  17. _, err = conn.Do("Hset", "cat", "name", "tom")
  18. if err != nil {
  19. fmt.Println("Hset 出错了")
  20. }
  21. _, err = conn.Do("Hset", "cat", "age", "12")
  22. if err != nil {
  23. fmt.Println("Hset 出错了")
  24. }
  25. // 3. 取数据
  26. h, err := redis.String(conn.Do("Hget", "cat", "name"))
  27. if err != nil {
  28. fmt.Println("get 出错了")
  29. return
  30. }
  31. fmt.Printf("hash 类型: %T, 值: %v \n", h, h)
  32. h2, err := redis.String(conn.Do("Hget", "cat", "age"))
  33. if err != nil {
  34. fmt.Println("get 出错了")
  35. return
  36. }
  37. fmt.Printf("hash 类型: %T, 值: %v \n", h2, h2)
  38. // hash 一次读写多个
  39. _, err = conn.Do("HMSet", "phone1", "name", "apple", "action", "call")
  40. if err != nil {
  41. fmt.Println("HMSet 出错了", err)
  42. return
  43. }
  44. // redis.Strings 处理多个值
  45. h3, err := redis.Strings(conn.Do("HMGet", "phone1", "name", "action"))
  46. if err != nil {
  47. fmt.Println("HMGet 出错了")
  48. return
  49. }
  50. fmt.Printf("hash 类型: %T, 值: %v \n", h3, h3)
  51. for _, v := range h3 {
  52. fmt.Println(v)
  53. }
  54. }