本文主要介绍go Web开发中操作redis。
Redigo是go连接Redis的扩展包,用此包时需先执行:
go get github.com/garyburd/redigo/redis
安装完后,在文件中导入redigo即可。
连接redis的样例如下:
import ( "fmt" // 导入redigo扩展包 "github.com/garyburd/redigo/redis" ) // 从配置文件获取redis配置并连接 host := beego.AppConfig.String("redis_host") db, _ := beego.AppConfig.Int("redis_db") // tcp连接redis rs, err := redis.Dial("tcp", host) // 操作完后自动关闭 defer rs.Close() // 若连接出错,则打印错误信息,返回 if err != nil { fmt.Println(err) fmt.Println("redis connect error") return } // 选择db rs.Do("SELECT", db)
往redis里存取数据的样例如下:
key := "aaa" value := "bbb" // 操作redis时调用Do方法,第一个参数传入操作名称(字符串),然后根据不同操作传入key、value、数字等 // 返回2个参数,第一个为操作标识,成功则为1,失败则为0;第二个为错误信息 n, err := rs.Do("SETNX", key, value) // 若操作失败则返回 if err != nil { fmt.Println(err) return } // 返回的n的类型是int64的,所以得将1或0转换成为int64类型的再比较 if n == int64(1) { // 设置过期时间为24小时 n, _ := rs.Do("EXPIRE", key, 24*3600) if n == int64(1) { fmt.Println("success") } } else if n == int64(0) { fmt.Println("the key has already existed") }从redis里取数据的样例如下:
key := "aaa" // 调用Do后,还得调用相应的方法才能取得数据 // 由于之前存的value是string类型,所以用redis.String将数据转换成string类型 value, err := redis.String(rs.Do("GET", key)) if err != nil { fmt.Println("fail") } fmt.Println(value)此时若不出错便会输出我们前面存的value:“bbb”
若value的类型为int,则用redis.Int转换
若value的类型为string,则用redis.String转换
若value的类型为json,则用redis.Byte转换
redis里存取json数据的样例如下:
import "encoding/json" import "fmt" // 存json数据 key := "aaa" imap := map[string]string{"key1": "111", "key2": "222"} // 将map转换成json数据 value, _ := json.Marshal(imap) // 存入redis n, err := rs.Do("SETNX", key, value) if err != nil { fmt.Println(err) } if n == int64(1) { fmt.Println("success") } // 取json数据 // 先声明imap用来装数据 var imap map[string]string key := "aaa" // json数据在go中是[]byte类型,所以此处用redis.Bytes转换 value, err := redis.Bytes(rs.Do("GET", key)) if err != nil { fmt.Println(err) } // 将json解析成map类型 errShal := json.Unmarshal(value, &imap) if errShal != nil { fmt.Println(err) } fmt.Println(imap["key1"]) fmt.Println(imap["key2"])
此时若不出错便会输出我们前面存的“111” “222”