Redigo--Go连接Redis

来源:互联网 发布:学解剖的软件 编辑:程序博客网 时间:2024/06/05 09:12

本文主要介绍go Web开发中操作redis。

Redigo是go连接Redis的扩展包,用此包时需先执行:

go get github.com/garyburd/redigo/redis
安装完后,在文件中导入redigo即可。

连接redis的样例如下:

[html] view plaincopy
  1. import (  
  2.     "fmt"  
  3.     // 导入redigo扩展包  
  4.     "github.com/garyburd/redigo/redis"  
  5. )  
  6. // 从配置文件获取redis配置并连接  
  7. host :beego.AppConfig.String("redis_host")  
  8. db, _ :beego.AppConfig.Int("redis_db")  
  9. // tcp连接redis  
  10. rs, err :redis.Dial("tcp", host)  
  11. // 操作完后自动关闭  
  12. defer rs.Close()  
  13. // 若连接出错,则打印错误信息,返回  
  14. if err != nil {  
  15.     fmt.Println(err)  
  16.     fmt.Println("redis connect error")  
  17.     return  
  18. }  
  19. // 选择db  
  20. rs.Do("SELECT", db)  

往redis里存取数据的样例如下:

[plain] view plaincopy
  1. key := "aaa"  
  2. value := "bbb"  
  3. // 操作redis时调用Do方法,第一个参数传入操作名称(字符串),然后根据不同操作传入key、value、数字等  
  4. // 返回2个参数,第一个为操作标识,成功则为1,失败则为0;第二个为错误信息  
  5. n, err := rs.Do("SETNX", key, value)  
  6. // 若操作失败则返回  
  7. if err != nil {  
  8.     fmt.Println(err)  
  9.     return  
  10. }  
  11. // 返回的n的类型是int64的,所以得将1或0转换成为int64类型的再比较  
  12. if n == int64(1) {  
  13.     // 设置过期时间为24小时  
  14.     n, _ := rs.Do("EXPIRE", key, 24*3600)  
  15.     if n == int64(1) {  
  16.         fmt.Println("success")  
  17.     }  
  18. } else if n == int64(0) {  
  19.     fmt.Println("the key has already existed")  
  20. }  
从redis里取数据的样例如下:

[plain] view plaincopy
  1. key := "aaa"  
  2. // 调用Do后,还得调用相应的方法才能取得数据  
  3. // 由于之前存的value是string类型,所以用redis.String将数据转换成string类型  
  4. value, err := redis.String(rs.Do("GET", key))  
  5. if err != nil {  
  6.     fmt.Println("fail")  
  7. }  
  8. fmt.Println(value)  
此时若不出错便会输出我们前面存的value:“bbb”

若value的类型为int,则用redis.Int转换

若value的类型为string,则用redis.String转换

若value的类型为json,则用redis.Byte转换

redis里存取json数据的样例如下:

[plain] view plaincopy
  1. import "encoding/json"  
  2. import "fmt"  
  3.   
  4. // 存json数据  
  5. key := "aaa"  
  6. imap := map[string]string{"key1": "111", "key2": "222"}  
  7. // 将map转换成json数据  
  8. value, _ := json.Marshal(imap)  
  9. // 存入redis  
  10. n, err := rs.Do("SETNX", key, value)  
  11. if err != nil {  
  12.     fmt.Println(err)  
  13. }  
  14. if n == int64(1) {  
  15.     fmt.Println("success")  
  16. }  
  17.   
  18.   
  19. // 取json数据  
  20. // 先声明imap用来装数据  
  21. var imap map[string]string  
  22. key := "aaa"  
  23. // json数据在go中是[]byte类型,所以此处用redis.Bytes转换  
  24. value, err := redis.Bytes(rs.Do("GET", key))  
  25. if err != nil {  
  26.     fmt.Println(err)  
  27. }  
  28. // 将json解析成map类型  
  29. errShal := json.Unmarshal(value, &imap)  
  30. if errShal != nil {  
  31.     fmt.Println(err)  
  32. }  
  33. fmt.Println(imap["key1"])  
  34. fmt.Println(imap["key2"])  

此时若不出错便会输出我们前面存的“111” “222”

看了上面的例子,应该对操作redis有所了解了吧。
0 0
原创粉丝点击