当前位置:   article > 正文

Go语言操作Redis_go操作redis

go操作redis

        最近工作中有使用到通过Go语言操作Redis相关内容,特此记录便于日后查阅。

        1、获取Golang的redis第三方api

  $ git clone https://github.com/garyburd/redigo.git

        2、获取redis连接 & Set/Get接口

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/garyburd/redigo/redis" // 引入redis包
  5. )
  6. func main() {
  7. // 通过go向redis写入数据和读取数据
  8. // 1.连接到redis
  9. conn, err := redis.Dial("tcp", "127.0.0.1:6379")
  10. if err != nil {
  11. fmt.Println("redis connect failed. err = ", err)
  12. return
  13. }
  14. defer conn.Close() //关闭连接
  15. // 2.通过go向redis写入数据
  16. _, err = conn.Do("Set", "name", "tomjerry")
  17. if err != nil {
  18. fmt.Println("Set err = ", err)
  19. return
  20. }
  21. // 3.从redis中读取数据
  22. // 由于返回的r是一个interface{},故要转成字符串
  23. r, err := redis.String(conn.Do("Get", "name"))
  24. if err != nil {
  25. fmt.Println("Get err = ", err)
  26. return
  27. }
  28. fmt.Println("操作ok. name =", r) // 操作ok. name = tomjerry
  29. }

        3、批量HMSet/HMGet

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/garyburd/redigo/redis" // 引入redis包
  5. )
  6. func main() {
  7. // 通过go向redis写入数据和读取数据
  8. // 1.连接到redis
  9. conn, err := redis.Dial("tcp", "127.0.0.1:6379")
  10. if err != nil {
  11. fmt.Println("redis connect failed. err = ", err)
  12. return
  13. }
  14. defer conn.Close() //关闭连接
  15. // 2.通过go向redis写入数据
  16. _, err = conn.Do("HMSet", "user01", "name", "jack", "age", 20)
  17. if err != nil {
  18. fmt.Println("HMSet err = ", err)
  19. return
  20. }
  21. // 3.从redis中读取数据
  22. // 由于返回的r是一个多类型的变量,故需要用redis.Strings()
  23. r, err := redis.Strings(conn.Do("HMGet", "user01", "name", "age"))
  24. if err != nil {
  25. fmt.Println("HMGet err = ", err)
  26. return
  27. }
  28. // 遍历结果
  29. for i, v := range r {
  30. fmt.Printf("r[%d]=%v\n", i, v)
  31. }
  32. /*
  33. r[0]=jack
  34. r[1]=20
  35. */
  36. }

        4、设置数据有效时间

  1. _, err = conn.Do("MSet", "name01", "RSQ", "name02", "Tom")
  2. if err != nil {
  3. fmt.Println("HMSet err = ", err)
  4. return
  5. }
  6. // 设置超时时间
  7. _, err = conn.Do("expire", "name01", 10)
  8. if err != nil {
  9. fmt.Println("Set Expire err = ", err)
  10. return
  11. }

        5、操作List

  1. // 1.通过go向redis写入数据
  2. _, err = conn.Do("Lpush", "herolist", "no1:宋江", 30, "no2:吴淞", 40)
  3. if err != nil {
  4. fmt.Println("Lpush err = ", err)
  5. return
  6. }
  7. // 2.从redis中读取数据
  8. r, err = redis.String(conn.Do("rpop", "herolist"))
  9. if err != nil {
  10. fmt.Println("rpop err = ", err)
  11. return
  12. }

        6、redis连接池

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/garyburd/redigo/redis"
  5. )
  6. // 定义一个全局的pool
  7. var pool *redis.Pool
  8. // 创建连接池
  9. func init() {
  10. pool = &redis.Pool{
  11. MaxIdle: 8, // 表示最大空闲连接数
  12. MaxActive: 0, // 表示和数据库的最大连接数,0表示没有限制
  13. IdleTimeout: 100, // 最大空闲时间
  14. Dial: func() (redis.Conn, error) { // 初始化连接的代码,连接哪个ip的redis
  15. return redis.Dial("tcp", "localhost:6379")
  16. },
  17. }
  18. }
  19. func main() {
  20. conn := pool.Get() // 从连接池中取出一个连接
  21. defer conn.Close() // 关闭连接池,一旦关闭连接池,就不能从连接池再取出连接
  22. _, err := conn.Do("set", "car", "BBB")
  23. if err != nil {
  24. fmt.Println("conn.Do err=", err)
  25. return
  26. }
  27. r, err := redis.String(conn.Do("Get", "car"))
  28. if err != nil {
  29. fmt.Println("read Data err=", err)
  30. return
  31. }
  32. fmt.Println("r=", r)
  33. // 如果要从pool池中取出连接,一定要保证连接池是没有关闭的
  34. }

        7、redis操作实战

  1. Monster信息[name, age, skill]
  2. 通过终端输入三个monster的信息,使用golang操作redis,存放到redis中[用hash数据类型]
  3. 遍历出所有的Monster信息,并显示在终端
  4. 保存monster可以使用hash数据类型,遍历时先取出所有的keys,比如keys monster*
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/garyburd/redigo/redis"
  5. )
  6. type Monster struct {
  7. Name string
  8. Age int
  9. Skill string
  10. }
  11. func Process(name string, age int, skill string) {
  12. // 1.连接redis
  13. conn, err := redis.Dial("tcp", "127.0.0.1:6379")
  14. if err != nil {
  15. fmt.Println("conn err = ", err)
  16. return
  17. }
  18. defer conn.Close()
  19. // 2.往redis数据库写入数据
  20. _, err = conn.Do("HMset", "monster", "name", name, "age", age, "skill", skill)
  21. if err != nil {
  22. fmt.Println("write data err = ", err)
  23. return
  24. }
  25. // 3.从redis中读取数据
  26. r, err := redis.Strings(conn.Do("HMget", "monster", "name", "age", "skill"))
  27. if err != nil {
  28. fmt.Println("read data err = ", err)
  29. return
  30. }
  31. for i, v := range r {
  32. fmt.Printf("r[%d]=%v\n", i, v)
  33. }
  34. }
  35. func main() {
  36. // 定义结构体实例
  37. var monster Monster
  38. fmt.Println("请输入monster的Name:")
  39. fmt.Scanln(&monster.Name)
  40. fmt.Println("请输入monster的Age:")
  41. fmt.Scanln(&monster.Age)
  42. fmt.Println("请输入monster的Skill:")
  43. fmt.Scanln(&monster.Skill)
  44. Process(monster.Name, monster.Age, monster.Skill)
  45. }

        到此 Golang语言操作Redis介绍完成。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/813693
推荐阅读
相关标签
  

闽ICP备14008679号